如何使用的preg_replace在PHP中逃生$?
-
12-09-2019 - |
题
我使用preg_replace
逃脱特殊字符:
$tmpStr=preg_replace("/\?/", "\?", $tmpStr);
$tmpStr=preg_replace("/\#/", "\#", $tmpStr);
$tmpStr=preg_replace("/\^/", "\^", $tmpStr);
$tmpStr=preg_replace("/\&/", "\&", $tmpStr);
$tmpStr=preg_replace("/\*/", "\*", $tmpStr);
$tmpStr=preg_replace("/\(/", "\(", $tmpStr);
$tmpStr=preg_replace("/\)/", "\)", $tmpStr);
$tmpStr=preg_replace("/\//", "\/", $tmpStr);
但我不能逃脱使用相同的功能$
:
$tmpStr=preg_replace("/\$/", "\$", $tmpStr);
和还当我用上述语句的所有空间得到由$
和$
更换不获取逃脱。
如何正确逃生美元符号?
解决方案
我会强烈建议使用 preg_quote()代替。
其他提示
在正确的答案是,你必须使用PHP的转义字符转义正则表达式的反斜杠和美元符号。
backslash = \\
dollar sign = \$
$tmpStr=preg_replace("/\\\$/", "\\$", $tmpStr);
这对于任何需要匹配的是包含一个美元符号的字符串是有用的。
看起来像你的问题是逃避的一个。在PHP单引号('
)比双引号("
)的工作方式不同。这就像在Perl,其中的变量插值不单引号字符串中发生了很多,和美元符号($
)不是元字符:
print "\$"; # prints $
print '\$'; # prints \$
此外,Perl的字符类将简化代码:
$tmpStr = preg_replace('/([?#^&*()$\\/])/', '\\\\$1', $tmpStr);
是,它似乎\\$
由PHP视为一个双引号字符串$
。
这意味着你必须使PHP说\$
看到\\\$
。
我只是想preg_replace("/\\\$$k\\\$/", $v, $data)
而事实上它的工作原理(取代$KEY$
的出现与价值。
IIRC你替换$以$。所以应该$$
您也可以尝试
$tmpStr=preg_replace('/\$/', '\$', $tmpStr);
是不是真的,看到PHP \ $ $为? 我没有测试了这一点,它可能是这样的;
PHP是第一,并取代你的 “/ \ $ /” 与 “/ $ /” 然后预浸引擎做它的魔力..不幸的是,$是一个正则表达式运算符(我相信这一个字符串的结尾相匹配?),所以它不会发现你的文字$ -characters而将
我想,你需要做的,就是doubble逃避$字符数限制像这样;
$ tmpStr = preg_replace函数( “/ \ $ /”, “\ $”,$ tmpStr);
还..在这种情况下,我将刚使用str_replace函数()
$pattern = preg_replace('/\$(.+)/', '\\\$$1', $pattern);
在PHP中,在HTML中使用“$”的特殊情况下,你也可以做以前替换为其实体:
$tmpStr = str_replace('$', '$',$tmpStr);
尝试和addslashes()?