ecshop中preg_replace替換為preg_replace_callback需要注意的事項

wangchunbo發表於2021-05-18

錯誤提示 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自學中心-免費程式設計視訊教學|

相關文章