У меня возникли проблемы с использованием функции 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 из неэкранированных угловых скобок с другим значением.
Если вы хотите иметь знаки «больше, чем» и «меньше», вам необходимо избегать их:
>
>>
<
это <
См. Например: http://www.w3schools.com/html/html_entities.asp
Вместо strip_tags () вместо этого используйте htmlspecialchars ().