发布于 1970-01-01 08:00
  • 3 个回答
    • <?php //cls_template.php
      //-- 原本

      return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);
      

      //-- 修改成

      return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->select($r[1]); }, $source);
      

      //-- 原本

      $val = preg_replace("/\[([^\[\]]*)\]/eis", "'.'.str_replace('$','\$','\\1')", $val);
      

      //-- 修改成

      $val = preg_replace_callback("/\[([^\[\]]*)\]/is", function($r) { return '.'.$r[1]; }, $val);
      

      //-- 原本

      $out = "<?php \n" . '$k = ' . preg_replace("/(\'\\$[^,]+)/e" , "stripslashes(trim('\\1','\''));", var_export($t, true)) . ";\n";
      

      //-- 修改成

      $out = "<?php \n" . '$k = ' . preg_replace_callback("/(\'\\$[^,]+)/" , function($r) { return stripslashes(trim($r[1],'\'')); }, var_export($t, true)) . ";\n";
      

      //--- 原本

      $pattern     = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/se';
      $replacement = "'{include file='.strtolower('\\1'). '}'";
      $source      = preg_replace($pattern, $replacement, $source);
      

      //--- 修改成

      $pattern     = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/s';
      $replacement = function ($r) { return '{include file='.strtolower($r[1]). '}'; };
      $source      = preg_replace_callback($pattern, $replacement, $source);
      2022-11-30 21:01 回答
    • 试试,没有环境没办法测试,根据提示信息改的

      第483行:改成

      $out = "<?php \n" . '$k = ' . preg_replace_callback("/(\'\\$[^,]+)/e" , function($r) { return stripslashes(trim('\\1','\'')); }, var_export($t, true)) . ";\n";

      第1061行:改成

      //$pattern     = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/se';
      //$replacement = "'{include file='.strtolower('\\1'). '}'";
      $source      = preg_replace('/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/se', function($r) { return '{include file='.strtolower('\\1'). '}';}, $source);
      2022-11-30 21:01 回答
    • 提示很清楚了啊
      把preg_replace换成preg_replace_callback
      看看preg_replace_callback的用法就明白了

      /*
      1、e参数去掉
      2、后面的\1换成回调的数组对应的元素
      */
      //483行
      $out = "<?php \n" . '$k = ' . preg_replace_callback("/(\'\\$[^,]+)/" ,function($r) { return stripslashes(trim($r[1],'\'')); }, var_export($t, true)) . ";\n";
      2022-11-30 21:01 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有