特殊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代码