由于弃用,我们目前在我们的网站上收到preg_replace错误消息。
我们的代码如下:
$out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $data);
有关如何使用非弃用代码替换它的任何建议吗?
答案 0 :(得分:5)
preg_
。它只是/e
(从PHP 5.5开始):
不推荐使用/ e修饰符。请改用preg_replace_callback()。 有关其他信息,请参阅PREG_REPLACE_EVAL文档 关于安全风险。
和preg_replace_callback()
几乎完全相同preg_replace()
,除了它使用回调而不是替换,代码的更新应该是快速的作业。
答案 1 :(得分:0)
您正在使用修饰符s
和e
。直接从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);