我使用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()代替。

其他提示

$符号已经与自身转义所以

$tmpStr=preg_replace("/$$/", "\$", $tmpStr);

我也建议看向和addslashes 代替。

在正确的答案是,你必须使用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()?

检查 php.net /和addslashes()

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top