Как стирать метки безопаснее, чем использовать функцию strip_tags?

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

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

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 

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

То, что я ищу, – это умный способ разбора HTML, чтобы избавиться только от реальных тегов HTML.

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

Любые, хотя?

Как дурацкий обходной путь вы можете отфильтровать скобки без html с помощью:

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

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

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

&gt; >>

&lt; это <

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

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

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