0

我希望已经在 SO 中找到它......但到目前为止还没有

我说的是一个查看 HTML ENCODED 字符串的正则表达式:例如

blip ♦ trout’s mouth

我用&\w+;and覆盖了所有的基础&#[0-9]+;吗?

$encoded_string = htmlspecialchars($_GET["searchterms"]);
echo "<b>Search results for submitted string: \"$encoded_string\"</b><br><br>";
$html_special_chars_pattern = "!(&\\w+;|&#[0-9]+;)!";
$non_html_tokens = preg_split( $html_special_chars_pattern, $encoded_string, -1, PREG_SPLIT_DELIM_CAPTURE );
4

2 回答 2

4

您缺少&#xH;&#XH;数字字符引用

5.3.1 数字字符引用

数字字符引用指定文档字符集中字符的代码位置。数字字符引用可以采用两种形式:

  • 语法“&#D;”,其中 D 是十进制数,指的是 ISO 10646 十进制字符数 D。

  • 语法“&#xH;” 或“&#XH;”,其中 H 是十六进制数,指的是 ISO 10646 十六进制字符数 H。数字字符引用中的十六进制数不区分大小写。

也就是说,&#[xX][a-fA-F0-9]+;在正则表达式中。

于 2012-12-16T13:39:35.780 回答
1

我已经把我之前的相关帖子作为答案放在这里。如果其他人提出了更好的解决方案或为什么会崩溃,请告诉我:)

preg_match_all('/&(?:[a-z]+|#\d+);/', $content, $matches);

也支持十六进制实体:

preg_match_all('/&(?:[a-z]+|#x?\d+);/i', $content, $matches);

顺便说一句,(?: ... )用于防止内存捕获。另请参阅:这个 Perl 正则表达式中的 `?` 是什么意思?

于 2012-12-16T13:37:17.267 回答