Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php正则表达式,用于识别解码字符串中的所有HTML特殊字符_Php_Html_Regex_Decoding - Fatal编程技术网

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

php正则表达式,用于识别解码字符串中的所有HTML特殊字符,php,html,regex,decoding,Php,Html,Regex,Decoding,我期待着在这么早就找到这个。。。但到目前为止还没有 我说的是一个正则表达式,它查看HTML编码的字符串:例如 blip &#9830; trout&rsquo;s mouth 我是否用&\w+覆盖了所有的基础和&#[0-9]+ $encoded_string = htmlspecialchars($_GET["searchterms"]); echo "<b>Search results for submitted string: \"$encoded_string

我期待着在这么早就找到这个。。。但到目前为止还没有

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

blip &#9830; trout&rsquo;s mouth
我是否用
&\w+覆盖了所有的基础
&#[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 );
$encoded\u string=htmlspecialchars($\u GET[“searchterms]”);
echo“提交字符串的搜索结果:\“$encoded\u string\”

”; $html_special_chars_pattern=“!(&\\w+|&#[0-9]+)!”; $non_html_tokens=preg_split($html_special_chars_pattern,$encoded_string,-1,preg_split_DELIM_CAPTURE);
我在这里给出了答案。如果有人提出了更好的解决方案,或者为什么会出现问题,请务必告诉我:)

要同时支持十六进制实体,请执行以下操作:

preg_match_all('/&(?:[a-z]+|#x?\d+);/i', $content, $matches);
顺便说一句,
(?:…)
用于防止内存捕获。另见:

我在这里给出了答案。如果有人提出了更好的解决方案,或者为什么会出现问题,请务必告诉我:)

要同时支持十六进制实体,请执行以下操作:

preg_match_all('/&(?:[a-z]+|#x?\d+);/i', $content, $matches);
顺便说一句,
(?:…)
用于防止内存捕获。另请参见:

您错过了

5.3.1数字字符参考

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

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

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

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

缺少

5.3.1数字字符参考

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

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

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


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

谢谢。。。据你所知,这是否涵盖了所有HTML实体(引用等),yes@Alexander+1谢谢你的推荐:)谢谢。。。据你所知,这是否涵盖了所有HTML实体(引用等),yes@Alexander+1谢谢你的推荐:)谢谢。。。正如您在下面的答案中所看到的,似乎还有十六进制参考值的问题。此外,我还试图了解“?:”序列在您的正则表达式中具有什么功能…@mikeverent,
(?:)
是一个非捕获组谢谢。。。正如您在下面的答案中所看到的,似乎还有十六进制参考值的问题。我还试图了解“?:”序列在您的正则表达式中有什么功能…@mikeverent,
(?:)
是一个非捕获组