0

为了转义双引号或单引号,我使用了正则表达式反向引用:

$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,你能确认一下吗?

4

1 回答 1

2

preg_*功能$1首先可以更好地使用,建议您使用它们。也就是说,为什么不只addslashes用于这个任务呢?

于 2013-09-23T15:39:43.927 回答