首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php正则表达式用于识别解码字符串中的所有HTML特殊字符

php正则表达式用于识别解码字符串中的所有HTML特殊字符
EN

Stack Overflow用户
提问于 2012-12-16 21:08:38
回答 2查看 3.8K关注 0票数 0

我想我已经找到这个了..。但到目前为止还没有

我说的是一个正则表达式,它查看HTML编码的字符串:

代码语言:javascript
复制
blip ♦ trout’s mouth

我是否已经用&\w+;&#[0-9]+;覆盖了所有的基础

代码语言:javascript
复制
$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 );
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-16 21:39:36

你错过了&#xH; or &#XH; numeric character references

5.3.1数字字符参考

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

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

  • The语法"&#xH;“或"&#XH;",其中H是十六进制数字,是指&#xH 10646十六进制字符数字。数字字符引用中的十六进制数字为case-insensitive.

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

票数 4
EN

Stack Overflow用户

发布于 2012-12-16 21:37:17

我在这里放了my earlier related post作为答案。如果其他人想出了更好的解决方案,或者为什么它会崩溃,请务必让我知道:)

代码语言:javascript
复制
preg_match_all('/&(?:[a-z]+|#\d+);/', $content, $matches);

也支持十六进制实体:

代码语言:javascript
复制
preg_match_all('/&(?:[a-z]+|#x?\d+);/i', $content, $matches);

顺便说一句,(?: ... )用于防止内存捕获。另请参阅:What does ? mean in this Perl regex?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13901577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档