Преобразование специальных символов в HTML-объекты без изменения тегов и параметров

Я использую редактор FreeTextBox, чтобы получить HTML-код, созданный пользователями. Проблема с этим – этот редактор не преобразовывает специальные символы в HTML-сущности за исключением «». Я не могу использовать theHTML = Server.HtmlEncode(theHTML) , потому что он преобразует весь HTML, включая tags и параметры, и я не хочу создавать theHTML.Replace список theHTML.Replace .

Есть ли какая-либо другая функция или метод для преобразования в html-объекты, но только внешние tags?

    Если у вас есть смесь < значение, начинающееся с тега, а < означает буквенный знак меньше, чем знак, вы не можете сказать, что это «тег», чтобы игнорировать, а какой нет.

    О том, что вы могли бы сделать, было бы обнаружение < использования, которые не были условно сформированным стартовым или конечным тегом, используя неприятное ненадежное регулярное выражение:

     < (?!\w+(\s+\w+="[^"<]*")*\s*/?>|/\w+\s*>) 

    и заменить их на < , Аналогично для & с & :

     &(?!\w+;|#\d+;|#x[0-9A-Fa-f]+;) 

    ( > обычно не требуется экранировать).

    Это не позволит использовать все возможные способы построения элементов, и это позволит сломать неправильно вложенные элементы и несуществующие объекты и испортит неэлементные конструкции, такие как комментарии. Поскольку регулярное выражение не может анализировать HTML, не говоря уже о HTML с добавленными хрустящими сломанными битами.

    Так что это вряд ли безопасно. Если вам нужна правильная разметка, которая не сломает вашу страницу, когда они случайно оставят div открытым, лучшим первым шагом будет проанализировать его как XHTML и отказаться от него с ошибкой, если это не правильно сформированный XML.

    Если у вас есть компонент расширенного текстового редактора, который генерирует вывод, где литерал < не экранирован, тогда пришло время заменить этот компонент чем-то менее ужасным. Но в целом это не очень хорошая идея, чтобы пользователи могли создавать HTML, потому что они действительно мусор. Плюс, позволяя кому-либо вводить HTML, дает им полный контроль над разрушением сайта и его безопасностью с помощью JavaScript. Простой язык разметки текста часто выигрывает.

    Я бы предложил parsing каждого элемента с использованием Linq в Xml и кодирование значения каждого элемента и узла атрибута. Я постараюсь придумать какой-то код, но эй, это 5 вечера в пятницу!

    После многого поиска, я обнаружил, что использовал неправильное свойство компонента FreeTextBox. Свойством был ConvertHtmlSymbolsToHtmlCodes, который должен быть правдой.

    Это также помогает использовать FormatHtmlTagsToXhtml, если вам нужно вставить свой код на страницы XHTML, потому что он использует сильную проверку с параметрами тегов и кавычками, окружающими их.