Избегайте всего HTML, кроме <br> - PullRequest
5 голосов
/ 13 мая 2011

Я пытаюсь отобразить комментарии на странице, и у меня возникают некоторые проблемы.

Существуют два разных типа комментариев, которые я пытаюсь обработать:

(1) Тип XSS.. напр. <script type="text/javascript">alert('hi')</script>.Это достаточно легко сделать, если перед тем, как он попадет в базу данных, его можно экранировать, а затем запустить на нем полоски и htmlentities.

(2) Комментарий с <br> в нем разрывается.Когда данные сохраняются в базе данных, я запускаю nl2br, поэтому данные выглядят как hi<br>hello<br><br>etc.Однако, когда я отображаю этот комментарий, <br> не превращаются в разрывы страниц, как я хочу.

Есть идеи, что делать?Я должен отметить, что отключение htmlentities исправляет второй тип, но затем первый тип выполняется как чистый html и отображает диалоговое окно с предупреждением.

Спасибо, Фил

Ответы [ 2 ]

11 голосов
/ 13 мая 2011

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

2 голосов
/ 13 мая 2011

Один метод: замените <br> на заполнитель, например \n.Затем выполните htmlentities, чтобы очистить HTML-код.Наконец, замените \n обратно на <br>, чтобы восстановить разрывы строк.

...