ecshop中preg_replace替换为preg_replace_callback需要注意的事项
错误提示 preg_replace_callback,替换后发现模板还是有问题
解决
在cls_template.php 1072行替换的时候如果报错preg_replace_callback(): Modifier /e cannot be used with replacement callback错误,就需要把
$pattern = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/es';
改为(把/es改为/s)
$pattern = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/s';
需要替换的还有很多,请自行全局搜索
回调问题
$pattern = ‘/.*?/se’;
$replacement = “‘{include file=’.strtolower(‘\1’). ‘}’”;
$source = preg_replace($pattern, $replacement, $source);
这一段代码有两处需要修改:
$pattern = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/se'; 中的'e'要去掉
$source = preg_replace($pattern, $replacement, $source);
改为:
$source= preg_replace_callback($pattern, function ($matcher) { return '{include file=' . strtolower($matcher[1]). '}'; },$source);
原因
php5.5版本以上 就废弃了 preg_replace 函数中 /e 这个修饰符
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: