7

当字符串包含“小于”和“大于”符号时,我在使用 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

是的,我知道我可以使用 < 和&gt;,但我没有机会将这些字符转换为 HTML 实体,因为数据已经存储,如您在我的示例中所见。

我正在寻找的是一种解析 HTML 的巧妙方法,以便只删除实际的 HTML 标签。

由于 TinyMCE 用于生成该数据,因此我知道在任何情况下都可以使用哪些实际的 html 标签,因此strip_tags($string, $black_list)实现会比strip_tags($string, $allowable_tags).

有什么想法吗?

4

3 回答 3

6

作为一种古怪的解决方法,您可以使用以下方法过滤非 html 括号:

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

之后应用 strip_tags() 。请注意这仅适用于您的特定示例和类似情况。这是一个具有一些启发式的正则表达式,而不是人工智能来从具有其他含义的未转义尖括号中识别 html 标签。

于 2011-02-14T18:55:31.187 回答
4

如果你想有“大于”和“小于”的符号,你需要对它们进行转义:

&gt;是 >

&lt;是 <

参见例如:http ://www.w3schools.com/html/html_entities.asp

于 2011-02-14T18:55:28.630 回答
2

而不是 strip_tags(),只需使用 htmlspecialchars() 代替。

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

于 2011-02-14T19:17:42.420 回答