php7中对preg_replace内的e不再支持

背景

最近开了一个新的系统,直接用的之前的代码,新系统中升级了php版本,改用php7,之前用的是php5.6,然后一顿操作,代码copy过来,环境打开,然后,然后,然后就一片空白,傻眼了,最开始以为是配置问题,然而并不是,试了另一个系统php7发现那个是用的smarty模板引擎,而现在这个系统是tpc,然后就一路断点找问题。最后问题找到了,

$template = preg_replace("/$varRegexp/es", "tpc_addquote('<?=\\1?>')", $template);

这条命令的结果居然是空,百度发现问题在preg_replace 的/e这里。

解决方案

说一下解决方案,因为不再支持了所以需要使用替代方法,改用preg_replace_callback替换就好。

        $template = preg_replace_callback(
            "/$varRegexp/s",
                function ($r) use ($lang) {
                    return tpc_addquote('<?=' . $r[1] . '?>');
                },
                $template
        );

好记性不如烂笔头

当找到这个问题的时候想起之前遇到的一个问题,之前的另一个系统中升级后发现db类报错了,当时就是解决了问题,并不知道为什么,想起是不是也是这个问题,找到修改记录。原来如此~~

//更改前
$joinStr = preg_replace("/__([A-Z_-]+)__/esU",C("DB_PREFIX").".strtolower('$1')",$joinStr);

//更改后

$joinStr = preg_replace_callback("/__([A-Z_-]+)__/",
            function ($matches) {
                return '_' . strtolower($matches[0]);
            },$joinStr);

再记录另一个问题

当时使用到phpexcel

然后到php7中就报错,phpexcel/calculation/functions.php 中581行的break

直接上代码吧

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值