Поскольку это - допустимый XML. Это помогает много, так как можно использовать много инструментов, первоначально разработанных для XML, таких как синтаксические анализаторы XML, XSLT, XPath, XQuery...
Нормальный HTML является диалектом SGML, и это не parsable без ведома схемы.
- one
- two
- three
корректный HTML , но не корректный XML. Если Вы хотите проанализировать это, необходимо знать, что ul
- элементы должны быть закрыты, но li
с не делают.
Есть две проблемы с тем, что вы предложили:
В сети есть несколько хороших ресурсов о дезинфекции вывода:
Конечно, удаление / экранирование всех тегов сделало бы язык разметки более безопасным. Однако весь смысл Markdown в том, что он позволяет пользователям включать произвольные HTML-теги, а также собственные формы разметки (*). Когда вы разрешаете HTML, вы все равно должны очистить / внести вывод в белый список, так что вы можете сделать это после преобразования уценки, чтобы уловить все.
*: Это дизайнерское решение, с которым я совершенно не согласен, и один, который, я думаю, не оказался полезным в SO, но он является дизайнерским решением, а не ошибкой.
Кстати, шаг 3 должен быть «вывод на страницу»; обычно это происходит на этапе вывода, когда база данных содержит необработанный отправленный текст.