Побег всех 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 5

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 в разрывы строк, вам не нужно беспокоиться о том, что они будут удалены. Может быть, это не то, что вы хотите, но надеюсь, что это дает идею.