我在php5.5上部署了ecshop出现了问题是:
Warning: preg_replace_callback(): Modifier /e cannot be used with replacement callback in E:\Program Files\xampps\htdocs\upload\includes\cls_template.php on line 1073我的对应的代码是: /* 将模板中所有library替换为链接 */
            $pattern     = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/se';            $replacement = function($matches) { return '{include file='.strtolower($matches[1]). '}';}; 
             $source      = preg_replace_callback($pattern, $replacement, $source);                                  本来我以为只用将preg_replace改成preg_replace_callback就可以了。
               之后我在网上找的说第二个值也就是这个:$replacement是需要函数的(也就是方法)。我把它提取出来也没有用。
            还是希望各位大虾帮忙解决下,谢谢!

解决方案 »

  1.   

    $pattern     = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/s';
    去掉 e 模式!如果你不能确定 $replacement 的写法是否正确,请贴出原来的 preg_replace 语句
      

  2.   

      /* 将模板中所有library替换为链接 */
                $pattern     = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/se';
                $replacement = "'{include file='.strtolower('\\1'). '}'";
                $source      = preg_replace($pattern, $replacement, $source);原句是这样的,本来原句提示的错误是,没有在preg_replace后面加callback,加了之后,说$replacement需要是函数调用,我就改成这样了。  麻烦了
      

  3.   

    原来的$source = '<!-- #BeginLibraryItem "/(XX-XXX)" -->12345<!-- #EndLibraryItem -->';
    $pattern     = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/se';
    $replacement = "'{include file='.strtolower('\\1'). '}'";
    $source      = preg_replace($pattern, $replacement, $source);
    echo $source;
    {include file=(xx-xxx)}改后的$source = '<!-- #BeginLibraryItem "/(XX-XXX)" -->12345<!-- #EndLibraryItem -->';
    $pattern     = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/s';
    $replacement = function($m) { return '{include file='.strtolower($m[1]). '}';};
    $source      = preg_replace_callback($pattern, $replacement, $source);
    echo $source;
    {include file=(xx-xxx)}