将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()

如何将 preg_replace e 转换为 preg_replace_callback?

preg_replace 没有转义“?”在参考文献中

PHP:输出一行不带preg_replace的HTML文档

PHP preg_replace使用例子