由于弃用,我们目前正在我们的网站上收到preg_replace错误消息。PHP preg_replace替代
我们的代码如下:
$out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $data);
这是如何可以与非过时的代码来取代任何建议?
由于弃用,我们目前正在我们的网站上收到preg_replace错误消息。PHP preg_replace替代
我们的代码如下:
$out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $data);
这是如何可以与非过时的代码来取代任何建议?
preg_
未被弃用。它只是/e
(自PHP 5.5起):
不推荐使用/ e修饰符。改为使用preg_replace_callback()。 有关安全风险的其他信息,请参阅PREG_REPLACE_EVAL文档以了解更多信息 。
和preg_replace_callback()
是它采用的回调,而不是替换几乎完全相同preg_replace()
有例外,你的代码的更新应迅速功课。
您正在使用修饰符s
和e
。直接从Deprecated feature sin PHP 5.5.x复制:
的
preg_replace()
/e
修改现在已经过时。而应使用preg_replace_callback()
函数。
在这种情况下,我发现这个 “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);
我学到新的东西。 upvoted。 – r3wt