当字符串包含'小于'和'大于'符号时,我在使用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
是的我知道我可以使用&amp; lt;和&amp; gt;,但我没有机会将这些字符转换为HTML实体,因为数据已经存储,如您在我的示例中所示。
我正在寻找的是一种解析HTML的聪明方法,以便只删除实际的HTML标记。
由于TinyMCE用于生成该数据,因此我知道在任何情况下都可以使用哪些实际的html标记,因此strip_tags($string, $black_list)
实现比strip_tags($string, $allowable_tags)
更有用。
有没有?
答案 0 :(得分:6)
作为一个古怪的解决方法,您可以使用以下方法过滤非html括号:
$html = preg_replace("# <(?![/a-z]) | (?<=\s)>(?![a-z]) #exi", "htmlentities('$0')", $html);
之后应用strip_tags()。请注意这仅适用于您的特定示例和类似情况。这是一个带有一些启发式的正则表达式,而不是人工智能从未转义的尖括号中辨别出其他含义的html标签。
答案 1 :(得分:4)
如果你想要“大于”和“小于”的标志,你需要逃脱它们:
>
是&gt;
<
是&lt;
答案 2 :(得分:2)
而不是使用strip_tags(),只需使用htmlspecialchars()。