PHP preg_replace替代方案

时间:2014-01-08 15:50:48

标签: php preg-replace deprecated

由于弃用,我们目前在我们的网站上收到preg_replace错误消息。

我们的代码如下:

$out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $data);

有关如何使用非弃用代码替换它的任何建议吗?

3 个答案:

答案 0 :(得分:5)

不推荐使用

preg_。它只是/e(从PHP 5.5开始):

  

不推荐使用/ e修饰符。请改用preg_replace_callback()。   有关其他信息,请参阅PREG_REPLACE_EVAL文档   关于安全风险。

preg_replace_callback()几乎完全相同preg_replace(),除了它使用回调而不是替换,代码的更新应该是快速的作业。

答案 1 :(得分:0)

您正在使用修饰符se。直接从Deprecated feature sin PHP 5.5.x

复制
  

现已弃用preg_replace() /e修饰符。相反,请使用preg_replace_callback()函数。

答案 2 :(得分:0)

在这种情况下,我发现这个“callback_function”工作正常:

$fixed_text = preg_replace_callback ( '!s:(\d+):"(.*?)";!',
function($m) {
       return ($m[1] == strlen($m[2])) ? $m[0] : 's:' . strlen($m[2]) . ':"' . $m[2] . '";';
},
$text);
相关问题