Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.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
特殊Ascii字符在正则表达式PHP preg_match()中转换为HTML实体_Php_Regex_Preg Replace_Preg Match - Fatal编程技术网

特殊Ascii字符在正则表达式PHP preg_match()中转换为HTML实体

特殊Ascii字符在正则表达式PHP preg_match()中转换为HTML实体,php,regex,preg-replace,preg-match,Php,Regex,Preg Replace,Preg Match,有一个简单的正则表达式,它将字符串中的分号替换为“*” preg\u replace(“/\;/”、“*”、$string) 但如果我使用“♠♣♥♦" 将其转换为HTML代码的字符串:♠;♣;♥;♦;,然后替换”;带“*”,因此输出为♠*♣*♥*♦* 如何阻止此字符转换为HTML代码?您可以跳过具有这种模式的HTML实体: $result = preg_replace('~&(?:#[0-9]+|[a-zA-Z]+);(*SKIP)(*FAIL)|

有一个简单的正则表达式,它将字符串中的分号替换为“*”

preg\u replace(“/\;/”、“*”、$string)

但如果我使用“♠♣♥♦" 将其转换为HTML代码的字符串:
♠;♣;♥;♦;
,然后替换”;带“*”,因此输出为
♠*♣*♥*♦*


如何阻止此字符转换为HTML代码?

您可以跳过具有这种模式的HTML实体:

$result = preg_replace('~&(?:#[0-9]+|[a-zA-Z]+);(*SKIP)(*FAIL)|;~', '*', $text);
&(?:#[0-9]+|[a-zA-Z]+)
描述html实体

(*SKIP)
动词强制在模式稍后失败时不重试(跳过)左侧匹配的子字符串。
(*FAIL)
强制模式失败

这样,第二种选择(因此
)就永远不是html实体的一部分


另一种可能的方法是转换之前的所有html实体,用
strtr($text,“;”,“*”)执行替换
并再次将特殊字符转换为html实体。

从哪里来的
$string
?它来自表单字段,后变量在
$string
之前是否在
preg\u replace
上进行html\u编码或类似操作?我已经在这里测试了替换,一切正常。不,我没有使用html\u encode或任何其他html函数爱奥尼斯,你理解错了,事实上我是在给予”♠♣♥♦“作为字符串,它们在preg_replace之前被转换为HTML代码。所以即使没有”;“在字符串中,它被替换。我想阻止它conversion@user1531437:我理解得很好。当有人花时间给你答案时,请花时间尝试/理解/阅读?如果你理解得比preg_匹配中的正则表达式HTML代码转换更好。你给出的正则表达式用于停止HTML代码