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....
