Как удалить теги безопаснее, чем использовать функцию strip_tags? - PullRequest
7 голосов
/ 14 февраля 2011

У меня возникают некоторые проблемы при использовании PHP-функции strip_tags, когда строка содержит знаки «меньше чем» и «больше чем».Например:

Если я сделаю:

strip_tags("<span>some text <5ml and then >10ml some text </span>");

Я получу:

some text 10ml some text

Но, очевидно, я хочу получить:

some text <5ml and then >10ml some text

Да, я знаю, что могу использовать <и>, но у меня нет шансов преобразовать эти символы в объекты HTML, поскольку данные уже сохранены, как вы можете видеть в моем примере.

Что я 'm - это умный способ разбора HTML, чтобы избавиться только от реальных HTML-тегов.

Поскольку TinyMCE использовался для генерации этих данных, я знаю, какие фактические HTML-теги можно использовать в любом случае, поэтомуРеализация strip_tags($string, $black_list) была бы более полезной, чем strip_tags($string, $allowable_tags).

Любые мысли?

Ответы [ 3 ]

6 голосов
/ 14 февраля 2011

В качестве дурацкого обходного пути вы можете отфильтровать не-html скобки с помощью:

$html = preg_replace("# <(?![/a-z]) | (?<=\s)>(?![a-z]) #exi", "htmlentities('$0')", $html);

Применить впоследствии strip_tags ()Обратите внимание, как это работает только для вашего конкретного примера и подобных случаев.Это регулярное выражение с некоторой эвристикой, а не с искусственным интеллектом, чтобы отличить HTML-теги из неэкранированных угловых скобок с другим значением.

4 голосов
/ 14 февраля 2011

Если вы хотите, чтобы знаки «больше» и «меньше», вам нужно их избежать:

&gt; is>

&lt; - это <</p>

См. Например это: http://www.w3schools.com/html/html_entities.asp

2 голосов
/ 14 февраля 2011

Вместо strip_tags (), вместо этого просто используйте htmlspecialchars ().

http://php.net/manual/en/function.htmlspecialchars.php

...