Побег всех HTML кроме
Я пытаюсь отобразить комментарии на странице, и у меня возникли некоторые проблемы.
Есть, по существу, два различных типа комментариев, которые я пытаюсь обрабатывать:
(1) тип XSS.. например, <script type="text/javascript">alert('hi')</script>
. Это обрабатывается довольно легко, экранируя его до того, как он попадает в базу данных, а затем запускает stripslashes и htmlentities на нем.
(2) комментарий с <br>
разрывами в нем. Когда данные хранятся в базе данных, я запускаю nl2br на нем, поэтому данные выглядят как hi<br>hello<br><br>etc
. Однако, когда я показываю этот комментарий, <br>
s не превращаются в разрывы страниц, как я хочу.
Есть идеи, что делать? Я должен отметить, что отключение htmlentities исправляет второй тип, но первый тип тогда выполняется как чистый html и отображает диалоговое окно предупреждения.
Спасибо, Фил
2 ответа:
Один из методов: замените
<br>
заполнителем, например\n
. Затем сделайте htmlentities, чтобы очистить html-код. Наконец, замените\n
обратно на<br>
, чтобы восстановить разрывы строк.
Если вы хотите удалить ненужные теги, вы можете попробовать
strip_tags
. Он поддерживаетallowable_tags
, так что вы можете указать любые теги, которые вы не хотите, чтобы быть лишены. Пример из руководства :// Allow <p> and <a> // you can add <br> if you want it not stripped echo strip_tags($text, '<p><a>');
Поэтому после того, как вы преобразовали все
\n
в разрывы строк, вам не нужно беспокоиться о том, что они будут удалены. Может быть, это не то, что вы хотите, но надеюсь, что это дает идею.