背景
最近想升级 PKCMS 系统,直接用的之前的代码,将系统适配到 PHP7,之前适配的是 PHP 5.3~5.6,然后一顿操作,发现打开后成一片空白,傻眼了,开始从系统底层检查,最后发现是模板引擎中的模板标签语法解析出了问题。这段解析来自 PHPCMS 的底层。
$str = preg_replace("/\<{(\\$[a-zA-Z0-9_\[\]\'\"\$\x7f-\xff]+)\}>/es", "tplTag_Addquote('<?php if(isset(\\1)) {echo \\1;}?>')", $str);
这条命令的结果居然是空,百度发现问题在preg_replace 的/e这里。
解决方案
说一下解决方案,因为不再支持了所以需要使用替代方法,改用preg_replace_callback替换就好。
$str = preg_replace_callback(
"/\<{(\\$[a-zA-Z0-9_\[\]\'\"\$\x7f-\xff]+)\}>/s",
function ($r) {
return self::tplTag_Addquote('<?php if(isset(' . $r[1] . ')) {echo ' . $r[1] . ';} ?>');
},
$str
);
转载请注明:隨習筆記 » php7中对preg_replace内的e不再支持