为了逃避双或单引号,我用正则表达式反向引用:PHP中的反向引用preg_replace()不稳定?
$strVal = '<div class="xclassname">Contents</div>';
$strVal = preg_replace("/([\"\'])/", "\\\\1", $strVal);
这通常给了我这个字符串(因为岁):
"<div class=\"xclassname\">Contents</div>"
用双引号正确转义C++风格。
但今天我的PHP 5.5.3给了我这样的结果:
"<div class=\1xclassname\1>Contents</div>"
与坏\ 1串换成了双引号。
现在我必须使用此:
$strVal = preg_replace("/([\"\'])/", "\\\\\${1}", $strVal);
的preg_replace()是在我的Windows 7操作系统不稳定,有时它给一个结果,其他的日子就给出了另一个?
请问您是否遇到过这种情况,为什么?
新增:
我忘了,我们已经更新了PHP 5.3之前PHP5.5.3几个星期,preg_repace()根据PHP的版本是不稳定的,而不是在日期时间函数:
preg_replace("/([\"\'])/", "\\\\1", $strVal); // is OK for PHP5.3.x, but
preg_replace("/([\"\'])/", "\\\\1", $strVal); // is bad for PHP5.5.x.
preg_replace("/([\"\'])/", "\\\\\${1}", $strVal); // is good for PHP5.5.x.
就是这样,我没有多个版本的PHP,你能确认吗?
最简单/最佳答案:不要使用正则表达式来处理html/xml。 preg_replace不是不稳定的。它确实如此。如果你得到不同的结果,那么你的系统配置会改变 - 例如安装了多个PHP版本。 –
''\\\ $ 1''可能会是一个简单的替换FYI – SmokeyPHP
此外,反向引用倾向于在正则表达式中是'\#',然后是替换中的'$#'(对于PHP funcs) - 其中'#'是组号 – SmokeyPHP