PHP過濾html註釋
阿新 • • 發佈:2018-01-06
但是 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註釋