網(wǎng)上有很多類似壓縮html代碼的,可是找了許多,代碼的確是可以壓縮,但是就只留一個(gè)代碼?喵喵喵???怎么實(shí)際的用都不說明一下
然后我結(jié)合我自己的代碼修改了一下,首先網(wǎng)上都是提供的一個(gè)函數(shù),那么首先得獲取php生成的代碼呀
然后就可以使用
ob_start();//打開緩沖區(qū)
然后在使用
ob_get_clean();//獲取緩沖區(qū)并且清除
這樣就得到了網(wǎng)站生成的html代碼
然后就可以進(jìn)行代碼壓縮
$content = "html內(nèi)容";
$output = ltrim(rtrim(preg_replace(array("/> *([^ ]*) *[ ]+\\1<'],$content)));
這樣就可以壓縮代碼了!可是這并沒有完,我把這些代碼用到網(wǎng)站里面的時(shí)候,壓縮沒問題,可是到了有代碼顯示(及pre標(biāo)簽)的頁(yè)面,顯示的pre標(biāo)簽里面的代碼全部變成一行了?什么鬼....
然后找了半天最后發(fā)現(xiàn)....是代碼壓縮的鍋..然后pre標(biāo)簽本身是按照編輯器回車來確定換行的,所以html源碼里面也會(huì)有換行,那么咋辦呢
當(dāng)然就是在壓縮html代碼的時(shí)候不要去壓縮pre標(biāo)簽咯
然后我選擇用正則先提取出來pre標(biāo)簽,然后壓縮完成后在進(jìn)行還原代碼
所以最終的代碼
$data = [];//存放pre標(biāo)簽內(nèi)容
$i = 0;//pre標(biāo)簽下標(biāo)
htmlFilterPreCompress($data,$content,$i);
function htmlFilterPreCompress($data,$content,$index){
$pre = "/<pre[\s\S]*?/";
if(preg_match($pre,$content,$m)){
//替換
$content = str_replace(current($m),"[HTML_COMPRESS]{$index}[/HTML_COMPRESS]",$content);
$data[$index] = current($m);
$index++;
//遞歸再次去檢測(cè)一次
$this->htmlFilterPreCompress($data,$content,$index);
}else{
$output = ltrim(rtrim(preg_replace(array("/> *([^ ]*) *[ ]+\\1$val){
$output = str_replace("[HTML_COMPRESS]{$key}[/HTML_COMPRESS]",$val,$output);
}
echo $output;
}
}
恩,代碼就是這樣的