将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
 
时间: 2024-08-25 00:45:37

将preg_replace()改写为preg_replace_callback()的相关文章

ecshop php5.4以上版本错误之preg_replace 替换成 preg_replace_callback

类似这样的报错: Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead inD:\wyh\ecshop\includes\cls_template.php on line 300 1.错误原因:preg_replace() 函数中用到的修饰符 /e 在 PHP5.5.x 中已经被弃用了.如果你的PHP版本恰好是PHP5.5.X,那你的ECSHOP肯定就会报类似这样的

Atitit.实现反向代理(1)----url rewrite 配置and内容改写 and -绝对路径链接改写 java php

Atitit.实现反向代理(1)----url rewrite  配置and内容改写 and -绝对路径链接改写 java php 1. 代理的实现:::普通代理and反向代理?? 1 2. url rewrite 的框架选型 1 3. ---------反向代理rewrite 配置mode_rewrite 1 1. Java的实现 2 4. 排除自身(apache_mode_rewrite) 2 2. Java的实现 排除自身 2 5. 内容改写(php mode_rwt) 3 3. Java

解决Deprecated: preg_replace(): The /e modifier is deprecated, use

使用php5.5运行ecshop的时候出现如下错误Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in \ecshop\includes\cls_template.php on line 300 解决方法如下 打开ecshop的目录找到includes\cls_template.php 到第300行 把 return preg_replace("/{([^\}

ECSHOP如何解决DEPRECATED: PREG_REPLACE()报错

类似这样的报错: Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in D:\wyh\ecshop\includes\cls_template.php on line 300 1.错误原因:preg_replace() 函数中用到的修饰符 /e 在 PHP5.5.x 中已经被弃用了.如果你的PHP版本恰好是PHP5.5.X,那你的ECSHOP肯定就会报类似这样

preg_replace引发的phpmyadmin(4.3.0-4.6.2)命令执行漏洞

编辑器坏了 (: 今天看到这个phpmyadmin的代码执行,https://www.waitalone.cn/phpmyadmin-preg_replace-rce.html 记录一下:preg_replace()函数 http://php.net/manual/zh/function.preg-replace.php php 7.0.0不再支持 /e修饰符. 请用 preg_replace_callback() 代替. php 5.5.0/e 修饰符已经被弃用了.使用 preg_replac

php新版本号废弃 preg_replace /e 修饰符

近期serverphp版本号升级到了 5.6  发现出了非常多警告 preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead 一開始没注意.后来发现 非常多这种警告,于是网上查了下 发现 php5.5版本号以上 就废弃了  preg_replace   函数中 /e 这个修饰符  /e 这个修饰符的意思 就是让 正则替换的 时候 替换规则 支持 php 代码 那么 应该怎么办呢 事实上 仅仅要

ecshop安装过程中的问题:cls_image::gd_version();不支持JPEG;Deprecated: preg_replace();Strict Standards;

在安装Ecshop的时候,遇到好多好多问题: 1.Strict Standards: Non-static method cls_image::gd_version() should not be called statically in D:\X\www\ecshop\install\includes\lib_installer.php on line 31 解决:找到install/includes/lib_installer.php中的第31行   return cls_image::gd

php新版本废弃 preg_replace /e 修饰符

最近服务器php版本升级到了 5.6  发现出了很多警告 preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead 一开始没注意,后来发现 很多这样的警告,于是网上查了下 发现 php5.5版本以上 就废弃了  preg_replace   函数中 /e 这个修饰符  /e 这个修饰符的意思 就是让 正则替换的 时候 替换规则 支持 php 代码 那么 应该怎么办呢 其实 只要 把 preg_

关于thinkhphp3.1中废弃 preg_replace /e 修饰符

警告:preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead 网上查了下 发现 php5.5版本以上 就废弃了  preg_replace   函数中 /e 这个修饰符 /e 这个修饰符的意思 就是让 正则替换的 时候 替换规则 支持 php 代码 解决方案:只要 把 preg_replace 里面 有 /e 修饰符的代码 修改成  preg_replace _callback  然后重新写