2014-01-08 73 views
1

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

我们的代码如下:

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

这是如何可以与非过时的代码来取代任何建议?

回答

4

preg_未被弃用。它只是/e(自PHP 5.5起):

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

preg_replace_callback()是它采用的回调,而不是替换几乎完全相同preg_replace()有例外,你的代码的更新应迅速功课。

+0

我学到新的东西。 upvoted。 – r3wt

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);