在處理用戶提交的富文本、爬蟲抓取的網頁內容或數據清洗時,常需要剝離 HTML 標籤,僅保留純文本。PHP 提供了多種實現方式,本文對比三種常見方法的優劣。
strip_tags() —— 官方推薦,最簡潔<?php
$str = "<font color=red>這是一個帶HTML標識的字串</font>";
$clean = strip_tags($str);
echo $clean; // 輸出:這是一個帶HTML標識的字串
?>
<)。preg_replace() —— 靈活但易出錯<?php
$str = "<font color=red>這是一個帶HTML標識的字串</font>";
// 移除所有 <...> 標籤
$clean = preg_replace('/<[^>]+>/', '', $str);
echo $clean; // 輸出:這是一個帶HTML標識的字串
?>
<br>)、可處理非標準標籤。>、註釋、CDATA 等),極易漏刪或誤刪;性能較差。htmlspecialchars() —— 顯示原始碼而非移除<?php
$str = "<font color=red>這是一個帶HTML標識的字串</font>";
$escaped = htmlspecialchars($str);
echo $escaped;
// 瀏覽器顯示:<font color=red>這是一個帶HTML標識的字串</font>
// 實際輸出:<font color=red>這是一個帶HTML標識的字串</font>
?>
< > & " ' 轉為實體。| 方法 | 適用場景 | 處理速度 | 健壯性 | 推薦指數 |
|---|---|---|---|---|
strip_tags() | 通用純文本提取、表單輸入清洗 | 快 | 高(內置解析器) | ⭐⭐⭐⭐⭐ |
preg_replace() | 特殊規則、非標準標記、需保留特定標籤屬性 | 中 | 低(正則局限) | ⭐⭐ |
htmlspecialchars() | 輸出到 HTML 頁面防 XSS、代碼展示 | 快 | 高 | ⭐⭐⭐⭐(不同用途) |
strip_tags() 清洗,必要時配合 trim() 去除首尾空白。htmlspecialchars($str, ENT_QUOTES, 'UTF-8')。<b><i><a>,用 strip_tags($str, '<b><i><a>'),但仍需配合 HTML Purifier 等庫做深度過濾。tidy 或 DOMDocument::loadHTML() 修復,再 strip_tags()。// 獲取純文本(推薦)
$text = strip_tags($html);
// 防 XSS 輸出
echo htmlspecialchars($text, ENT_QUOTES, 'UTF-8');