将preg_replace()改写为preg_replace_callback()
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将preg_replace()改写为preg_replace_callback()相关的知识,希望对你有一定的参考价值。
php5.5之后,preg_replace()函数由于可能带来的安全问题而被抛弃使用,升级为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
以上是关于将preg_replace()改写为preg_replace_callback()的主要内容,如果未能解决你的问题,请参考以下文章
php 将 preg_replace 转换为 preg_replace_callback
无法将带有修饰符 /e 的 preg_replace() 转换为 preg_replace_callback()