ecshop中preg_replace替换为preg_replace_callback需要注意的事项

错误提示 preg_replace_callback,替换后发现模板还是有问题

ecshop中preg_replace替换为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';

需要替换的还有很多,请自行全局搜索

ecshop中preg_replace替换为preg_replace_callback需要注意的事项

回调问题

$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 这个修饰符

ecshop中preg_replace替换为preg_replace_callback需要注意的事项

本作品采用《CC 协议》,转载必须注明作者和本文链接
嗨,我是波波。曾经创业,有收获也有损失。我积累了丰富教学与编程经验,期待和你互动和进步! 公众号:上海PHP自学中心 付费知识星球:破解面试:程序员的求职导师
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

我昨天还折腾了一下

2年前 评论
wangchunbo

@carson 哈哈老版本要维护,没办法

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
司机 @ 欣昊玉
文章
273
粉丝
339
喜欢
557
收藏
1104
排名:64
访问:12.2 万
私信
所有博文
社区赞助商