Как разрешить простые HTML-теги в комментариях или где угодно? - PullRequest
2 голосов
/ 21 февраля 2009

В моем веб-приложении я разрабатываю функцию комментирования, где пользователь может комментировать. Но я столкнулся с проблемой, которая заключается в том, что я хочу разрешить использование простых тегов HTML в поле для комментариев. HTML-теги типа <b>, <strong>, <i>, <em>, <u>, и т. Д., Которые обычно разрешается вводить в поле для комментариев. Но потом я также хочу, чтобы, когда пользователь нажимал клавишу ввода, он автоматически конвертировался в разрывы (<br /> теги) и сохранялся в базе данных, поэтому, когда я буду отображать их на веб-странице, они будут выглядеть так, как при вводе пользователем. .

Подскажите, пожалуйста, как разобрать, что введенный пользователем только разрешенный набор тегов HTML и как преобразовать ввод в теги <br /> и затем сохранить их в базе данных.

Или, если у кого-то есть идея или предложение по реализации такого рода функций. Я использую ASP.NET 2.0 (C #)

Я заметил, что StackOverflow.com делает то же самое при редактировании профиля. Когда мы редактируем наш профиль, то под строкой «О себе» написано «Основной HTML разрешен», я хочу сделать почти такую ​​же функциональность.

Ответы [ 5 ]

2 голосов
/ 21 февраля 2009

У меня нет конкретного ответа на C #, но вы можете сделать это несколькими различными способами. Один из них - позволить пользователю вводить все, что он хочет, а затем запустить фильтр, чтобы убрать «плохой» HTML. Существует множество фильтров с открытым исходным кодом, которые делают это для PHP, Python и т. Д. В общем, это довольно сложная проблема, и лучше, чтобы какой-то хорошо разработанный сторонний код делал это, а не писал сам.

Другой способ справиться с этим - позволить пользователю вводить комментарии на каком-то более простом языке разметки, например BBCode, Textile или Markdown (stackoverflow использует Markdown), возможно, в сочетании с хорошим редактором Javascript. Затем вы пропускаете текст пользователя через процессор для одного из этих языков разметки, чтобы получить HTML. Обычно вы можете получить реализации этих процессоров для любого языка, который вы используете. Эти процессоры обычно удаляют «плохой» HTML.

1 голос
/ 21 августа 2013

Это довольно "просто" сделать это в php и python из-за большого количества функций. Я все еще изучаю c # .lol. но еще не сталкивался с функцией. Скорее всего, она существует, и все, что вам нужно сделать, это найти ее. Я имею в виду функцию, которая может принимать пользовательский ввод, искать разрешенные теги (которые, конечно, находятся в массиве) и замените <> чем-то другим, например, [], затем используйте функцию для экранирования других тегов html. В php мы используем htmlentities (). Что-то вроде

<code>
$txt=$_POST['comment'];
$txt=strreplace("<b>*</b>","[b]*[/b],"$txt");
$securetxt=htmlentities($txt);
$finaltxt=strreplace("[b]*[/b]","<b>*</b>","$securetxt");

// Теперь сохраняем в БД

0 голосов
/ 01 июня 2009

Это опасная дорога, чтобы идти вниз. Вы можете подумать, что можете сделать несколько удивительных регулярных выражений или найти кого-то, кто может помочь вам с этим, но очистка НЕКОТОРЫХ разметок и оставление других - просто сумасшедший разговор.

Я настоятельно рекомендую вам заглянуть в BBCode или другую систему токенов. Даже что-то не маркированное, например, то, что использует SO, вероятно, намного лучшее решение.

0 голосов
/ 21 февраля 2009

Я не знаю asp.net, но в php есть простая функция, strip_tags , которая позволяет вам добавлять исключения (в вашем случае, b , em и т. д.). Если в C # ничего подобного нет, вы можете написать регулярное выражение, которое удаляет все теги, кроме разрешенных, но есть вероятность, что такое выражение уже существует, поэтому его легко найти.

замена \ n (или чего-то подобного) на br не будет проблемой либо с простым поиском и заменой.

0 голосов
/ 21 февраля 2009

Я не уверен, но я думаю, что вы должны экранировать символы html при вставке в базу данных и при получении эхо-сигналов без экранирования, чтобы браузер мог видеть их так же, как html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...