将preg_replace()改写为preg_replace_callback()

时间:2023-11-24 16:06:26

preg_replace()函数使用/e修饰符可能带来安全隐患,PHP5.5之后,该用法被抛弃使用,升级为preg_replace_callback()。在新版本下运行老版本的代码,会出现错误,如:

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in D:\xampp\htdocs\eccore\view\template.php on line 726

这时需要将函数进行改写。

打开错误提示中相应的文件,找到对应函数:

$val = preg_replace("/\[([^\[\]]*)\]/eis", "'.'.str_replace('$','\$','\\1')", $val);

改写为:

$val = preg_replace_callback("/\[([^\[\]]*)\]/is", function($matches){
return '.'.str_replace('$','\$','$matches[1]');
}, $val);
$matches[1]代表捕获的第一个子组,$matches[0]则代表完全匹配的字符串。具体改写方法是,将原来的第二个参数变为回调函数,在函数中返回原来第二个参数相同的值。
这两个函数原型可参阅官方文档:http://php.net/manual/zh/function.preg-replace.php