PHP 函數 strip_tags 提供了從字符串中去除 HTML 和 PHP 標記的功能,該函數嘗試返回給定的字符串 str 去除空字符、HTML 和 PHP 標記后的結果。
由于 strip_tags() 無法實際驗證 HTML,不完整或者破損標簽將導致更多的數據被刪除。
比如下述代碼:
<div>string</div>string<string<b>hello</b><div>string</div>
通過 strip_tags($str, ‘<div>’) 過濾,我們可能期望得到如下結果:
<div>string</div>string<stringhello<div>string</div>
而實際操作結果是這樣的:
<div>string</div>string
這一切都是因為加紅的那個左尖括號,查了 PHP 的文檔,有一個警告提示:
由于 strip_tags() 無法實際驗證 HTML,不完整或者破損標簽將導致更多的數據被刪除。
既然在執行過濾前無法驗證代碼正確性,遇到和標簽相關的字符 “<” 或 “>” 后面的代碼就全掛了!
2013.01.11 更新:
以下方法可以解決該問題,但可能在 HTML 數據過大時,存在一定的效率問題,慎用!
function fixtags ($text) {$text = htmlspecialchars($text);$text = preg_replace("/"/", """", $text);$tags = "/<(!|)(/|)(w*)( |)(w*)([=]*)(?|(")"""|)(?|(.*)?"(")|)([ ]?)(/|)>/i";$replacement = "<$1$2$3$4$5$6$7$8$9$10$11>";$text = preg_replace($tags, $replacement, $text);$text = preg_replace("/=""/", "=", $text);$text = preg_replace("/""/", """, $text);return $text;}
使用方法:
strip_tags(fixtags($string), '<div>');