在 PHP 開發中,移除字符串中的 HTML 標籤是常見需求(如內容摘要、防 XSS、數據清洗)。本文整理三種主流方案,並說明適用場景與優缺點。
若僅需去除某幾個已知標籤,可用 str_replace 先處理,再配合 strip_tags 兜底:
<?php
function strip($str) {
$str = str_replace("<br>", "", $str); // 先移除換行標籤
// $str = htmlspecialchars($str); // 如需轉義而非刪除,可取消註釋
return strip_tags($str); // 刪除其餘所有標籤
}
?>
優點:可保留特定標籤邏輯;缺點:需預知目標標籤,通用性弱。
strip_tags()(推薦通用場景)PHP 原生提供 strip_tags(string $string, array|string|null $allowable_tags = null),一行代碼搞定:
<?php
echo strip_tags("Hello <b>World</b>"); // 輸出:Hello World
// 非標準 HTML 也能正確處理
echo strip_tags('<a href=">">cftea</a>'); // 輸出:cftea
// 保留允許的標籤(第二參數)
$str = 'www<p>dreamdu</p>.com';
echo htmlspecialchars($str) . "<br>"; // 顯示原始碼
echo strip_tags($str, '<p>'); // 僅保留 <p> 標籤
?>
優點:原生、高效、支持白名單保留標籤;注意:對屬性(如 onclick)不會過濾,若需防 XSS 請配合 htmlspecialchars。
strtr() 字符轉換(特殊場景)strtr 可按字符或數組映射替換,適合「已知少量特殊字符替換」而非完整標籤清洗:
<?php
// 語法一:strtr(string, from, to)
echo strtr("Hilla Warld", "ia", "eo"); // Hello World
// 語法二:strtr(string, array)
$arr = ["Hello" => "Hi", "world" => "earth"];
echo strtr("Hello world", $arr); // Hi earth
?>
適用場景:簡單字符映射替換(如全半角轉換、特定實體編碼),不適合 完整 HTML 標籤移除。
| 方法 | 適用場景 | 推薦指數 |
|---|---|---|
strip_tags() | 通用 HTML 標籤移除,可保留白名單標籤 | ★★★★★ |
str_replace + strip_tags() | 需預處理特定標籤(如 <br> 轉換) | ★★★★☆ |
strtr() | 極簡字符級替換,非標籤清洗首選 | ★★☆☆☆ |
安全提示:若輸出到 HTML 頁面,務必在 strip_tags 後配合 htmlspecialchars() 或使用成熟的 HTML Purifier 庫,防範 XSS 攻擊。