1. 程式人生 > >PHP過濾html註釋

PHP過濾html註釋

但是 ace 繼續 per blog php echo 基本上 repl

過濾html註釋:

所謂過濾,不過是字符串的匹配與替換,這裏我們用到的正則匹配替換函數preg_replace(reg,replace,string);,PHPer都清楚,這個函數的關鍵在於reg的精確度,那麽我們就來試試看吧:

首先要知道html註釋的格式,是這樣的:<!--註釋內容-->。

開始正則的書寫

$html = "<!--something-->something";
$html = preg_replace("/<!--.*-->/","",$html);
echo $html;

上面的代碼將輸出 something,似乎成功了呢,不急,多測試幾個例子

$html = "<!--something-->something<!--something-->";
$html = preg_replace("/<!--.*-->/","",$html);
echo $html;

這個例子告訴我們,這樣寫並不能達到我們期望的效果,於是正則優化成了這樣

preg_replace("/<!--.*?-->/","",$html);

嗯,這下滿意了,但是html中會存在這樣的代碼<!--[if lt IE 9]>something<![endif]-->,這是瀏覽器兼容代碼,顯然是不能被過濾的,所以我們的正則繼續優化,變成這樣

preg_replace("/<!--[^\!\[]*?-->/","",$html);

又接著如果html中有<script><!--something//--></script>的代碼,我們又需要改一下我們的匹配規則了,改成了這樣

preg_replace("/<!--[^\!\[]*?(?<!\/\/)-->/","",$html);

這樣的話我基本上就去掉了我需要去掉的html的註釋了!

意外收獲:在優化過程中,沒有多多行註釋進行考慮,但規則意外的正常匹配了多行註釋,不知道是否因為是從文件讀取的html!

經測試尚未發現有將正文過濾掉的情況,如有疑問,歡迎留言指正。

PHP過濾html註釋