THINKPHP 清除HTML注釋、換行符、空格、制表符等


thinkphp3.2 3.2中取消了配置文件中的 'TMPL_STRIP_SPACE' 屬性,所以我們先來修改:\ThinkPHP\Library\Think\Template.class.php 文件

找到compiler方法:

/**
     * 編譯模板文件內容
     * @access protected
     * @param mixed $tmplContent 模板內容
     * @return string
     */
    protected function compiler($tmplContent) {
        //模板解析
        $tmplContent =  $this->parse($tmplContent);
        // 還原被替換的Literal標簽
        $tmplContent =  preg_replace_callback('/<!--###literal(\d+)###-->/is', array($this, 'restoreLiteral'), $tmplContent);
        // 添加安全代碼
        $tmplContent =  '<?php if (!defined(\'THINK_PATH\')) exit();?>'.$tmplContent;

        /* 去除html空格與換行 */
        if(C('TMPL_STRIP_SPACE')) {
            //方法一
            // $find = array('~>\s+<~','~>(\s+\n|\r)~');
            // $replace = array('><','>');
            // $tmplContent = preg_replace($find, $replace, $tmplContent);
            //方法二
            // $tmplContent = trim($tmplContent); //清除字符串兩邊的空格
            // $tmplContent = preg_replace("/\t/","",$tmplContent); 
            // $tmplContent = preg_replace("/\r\n/","",$tmplContent); 
            // $tmplContent = preg_replace("/\r/","",$tmplContent); 
            // $tmplContent = preg_replace("/\n/","",$tmplContent); 
            // $tmplContent = preg_replace("/  /","",$tmplContent);  //匹配html中的空格 制表符
            //方法三
            $tmplContent = $this->compress_html($tmplContent);
        }

        // 優化生成的php代碼
        $tmplContent = str_replace('?><?php','',$tmplContent);
        // 模版編譯過濾標簽
        Hook::listen('template_filter',$tmplContent);
        return strip_whitespace($tmplContent);
    }

如上所示,添加 if條件 使配置文件支持該屬性。

if(C('TMPL_STRIP_SPACE'))

配置文件中就可以使用:

'TMPL_STRIP_SPACE' =>  true,       // 是否去除模板文件里面的html空格與換行

開啟壓縮了。

=====================================================================================

上面的代碼展示了三種壓縮方法,方法三使用了自定義的方法:

/** 
    * 壓縮html : 清除換行符,清除制表符,去掉注釋標記 
    * @param $string 
    * @return壓縮后的$string
    * */ 
    public function compress_html($string){ 
        $string=str_replace("\r\n",'',$string);//清除換行符 
        $string=str_replace("\n",'',$string);//清除換行符
        $string=str_replace("\t",'',$string);//清除制表符
        $pattern=array(
            "/> *([^ ]*) *</",//去掉注釋標記
            "/[\s]+/",
            "/<!--[^!]*-->/",
            "/\" /",
            "/ \"/",
            "'/\*[^*]*\*/'"
        );
        $replace=array (
            ">\\1<",
            " ",
            "",
            "\"",
            "\"",
            ""
        );
        return preg_replace($pattern, $replace, $string);
    }

另一種方法:

function higrid_compress_html($higrid_uncompress_html_source )
{
    $chunks = preg_split( '/(<pre.*?\/pre>)/ms', $higrid_uncompress_html_source, -1, PREG_SPLIT_DELIM_CAPTURE );
    $higrid_uncompress_html_source = '';//[higrid.net]修改壓縮html : 清除換行符,清除制表符,去掉注釋標記
    foreach ( $chunks as $c )
    {
        if ( strpos( $c, '<pre' ) !== 0 )
        {
            //remove new lines & tabs
            $c = preg_replace( '/[\\n\\r\\t]+/', ' ', $c );
            //remove extra whitespace
            $c = preg_replace( '/\\s{2,}/', ' ', $c );
            //remove inter-tag whitespace
            $c = preg_replace( '/>\\s</', '><', $c );
            //remove CSS & JS comments
            $c = preg_replace( '/\\/\\*.*?\\*\\//i', '', $c );
        }
        $higrid_uncompress_html_source .= $c;
    }
    return $higrid_uncompress_html_source;
}

php壓縮html函數代碼總結

有些童鞋不 推薦壓縮html , 主要原因除了上面所說的 php來壓縮HTML注意事項 外,通過 gzip 壓縮已經能達到很好的效果。另外,因為產生影響HTML的角色太多(靜態,動態,前端動態),也沒什么量化指標,所以很難控制壓縮成什么樣(代碼寫成什么程度)。代碼更需要考慮執行效率,而不是傳輸效率。對於動態頁面來說,HTML 的壓縮有可能還會增加服務器的 CPU 負擔,得不償失。Google的壓縮網頁 是因為早期他希望首頁文本盡可能控制在一個或兩個包內,而且他的首頁太重要了,流量也很離譜。壓縮一個字節,總流量一算都是個不小的數字,自然也就是必要之舉了。進一步的壓縮存在問題,除非能像 Google 一樣充分測試(Google 也僅壓縮了少部分核心服務的頁面),否則不推薦對 HTML 進行壓縮處理。

=========================================

查看效果:

故事234:www.story234.com

荊州古城:www.jzeye.com

 

提示:如果頁面使用了如下的代碼

<volist name="jzgs" id="v" key="k"  offset="10" length='3' >
  <li {$k==1?"style='margin-left:0'":""} ><a href="/{$v.mode.url}/{$v.id}.html"  title="{$v.title}"><img src="{$v.img}" width=120 height=120 alt="{$v.title}"/><span>{$v.title}</span></a></li>
</volist>

三元運算符:

<li {$k==1?"style='margin-left:0'":""} >

方法一、方法二、壓縮以后可能會產生錯誤 <listyle....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM