strip_tags() 是 PHP 專門用於剝離 HTML/PHP 標籤的函數,支持保留允許標籤列表。
<?php
$html = 'Hello World!
';
// 移除所有標籤
echo strip_tags($html);
// 輸出: Hello World!alert(1)
// 保留 和
echo strip_tags($html, '
');
// 輸出:
Hello World!
alert(1)
?>
注意: 該函數不解析屬性,<img src=x onerror=alert(1)> 的 onerror 會被保留為文本,需配合 HTML Purifier 等庫做深度 XSS 防護。
<?php
function removeHtmlTagsRegex($str) {
// 移除所有 <...> 標籤
$str = preg_replace('/<[^>]+>/', '', $str);
// 解碼實體
$str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
return trim($str);
}
$html = '測試 內容
';
echo removeHtmlTagsRegex($html); // 測試 內容
?>
缺點: 正則難以完美處理巢狀標籤、屬性中包含 >、CDATA、註釋等邊界情況,易誤傷文本內容。
<?php
function clearHtml($str) {
// 僅轉義 < 和 >,保留標籤文本可見
$str = str_replace(['<', '>'], ['<', '>'], $str);
return $str;
}
function text2html($txt) {
// 將 HTML 實體還原為可見字符,並壓縮空白
$txt = html_entity_decode($txt, ENT_QUOTES, 'UTF-8');
$txt = preg_replace('/\s+/', ' ', $txt);
return trim($txt);
}
?>
htmlspecialchars() 編碼,而非移除標籤。strip_tags() + html_entity_decode() + trim()。ezyang/htmlpurifier),配置白名單標籤/屬性/樣式。日常開發首選 strip_tags() 配合允許標籤參數;安全敏感場景務必引入 HTML Purifier;切勿自造正則處理任意 HTML。