duanbushi1867 2014-12-12 14:37
浏览 51
已采纳

preg_replace_callback存储在全局数组中匹配并替换

I'm trying to compress an HTML code, but keep the style, script, pre and conditional IE untouched.

My problem is that I can't store the matches of function inside an array. I can succesfully replace the regex results, but the resulting array is empty $idarray:

function html_compress($string){

    //Substitute style, script and pre tag with unique id

    $idarray=array();

    $search=array('@<!--\[if\s(?:[^<]+|<(?!!\[endif\]-->))*<!\[endif\]-->@','@<script[^>]*>(?:[^<]+|)</script>@','@<style[^>]*>(?:[^<]+|)</style>@','@<pre[^>]*>(?:[^<]+|)</pre>@','@//<!\[CDATA\[(?:[^<]+|)//]]>@');
    $string=preg_replace_callback($search,
                                  function($m){
                                      $id=uniqid();
                                      global $idarray;
                                      $idarray[]=array($id,$m);
                                      return '<!['.$id.']!>';
                                  },
                                  $string
    );

    $search = array('/\>[^\S ]+/s','/[^\S ]+\</s','/(\s)+/s');
    $replace = array('>','<','\\1');
    $string = preg_replace($search, $replace, $string);

    //Remove blank lines
    $string=preg_replace("/(^[
]*|[
]+)[\s\t]*[
]+/", "
", $string);

    //Replace unique id with script, style, pre original tag
    $c=count($idarray);
    for($i=0;$i<$c;$i++){
        $string = str_replace($idarray[$i][0], $idarray[$i][1], $string);
    }

    Mage::log(print_r($idarray, true), null, 'idarray.log');

    return $string;
}
  • 写回答

1条回答 默认 最新

  • duanniu3385 2014-12-12 19:51
    关注

    Ok, at the beginning:

    global $idarray;
    $idarray=array();
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题