本文主要是介绍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
直接上代码吧
这篇关于php7中对preg_replace内的e不再支持的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!