Если вы хотите разрешить пользователю вводить HTML, а затем отображать его на своем веб-сайте, действительно отличным решением будет HTMLPurifier .
Он принимает любой «сортирующий» код HTML в качестве входных данных и возвращает valid-HTML, позволяющий вам указать, какие теги и атрибуты должны быть разрешены - все остальные будут удалены.
Таким образом, если ваши пользователи введут неверный HTML, вы все равно получите действительный HTML (меньше риск разрушения макета при его выводе) , и если вы укажете только несколько не опасные теги и атрибуты, это большой плюс для безопасности.
Если вы хотите попробовать его без необходимости интегрировать его в свое приложение, то доступна демонстрационная страница , кстати.
Например, если я введу что-то вроде этого:
<p>
this <b>is a<i>test</b></i>
with a not <em>closed tag
and a <a href="http://google.com" onclick="alert('bouh');">link</a>
and some <script type="text/javascript>alert('script');</script>
</p>
HTML-код, который я получу как , будет :
<p>
this <b>is a<i>test</i></b>
with a not <em>closed tag
and a <a href="http://google.com">link</a>
and some </em></p>
т. Е. Теги в порядке (закрыты, в правильном порядке), тег сценария удален, как и атрибут onclick ссылки.