首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 移除 HTML 標籤的三種方法對比與最佳實踐

     編輯:PHP 綜合知識

需求場景

在處理用戶提交的富文本、爬蟲抓取的網頁內容或數據清洗時,常需要剝離 HTML 標籤,僅保留純文本。PHP 提供了多種實現方式,本文對比三種常見方法的優劣。

方法一:strip_tags() —— 官方推薦,最簡潔

<?php
$str = "<font color=red>這是一個帶HTML標識的字串</font>";
$clean = strip_tags($str);
echo $clean; // 輸出:這是一個帶HTML標識的字串
?>
  • 優點:內置函數、一行代碼、自動處理巢狀標籤、可選擇性保留允許的標籤(第二參數)。
  • 缺點:對於畸形 HTML(如未閉合標籤)可能殘留字符;不處理 HTML 實體(如 &lt;)。

方法二:正則替換 preg_replace() —— 靈活但易出錯

<?php
$str = "<font color=red>這是一個帶HTML標識的字串</font>";
// 移除所有 <...> 標籤
$clean = preg_replace('/<[^>]+>/', '', $str);
echo $clean; // 輸出:這是一個帶HTML標識的字串
?>
  • 優點:可自定義規則(如保留 <br>)、可處理非標準標籤。
  • 缺點:正則難以完美匹配所有 HTML 情況(屬性中含 >、註釋、CDATA 等),極易漏刪或誤刪;性能較差。

方法三:實體轉義 htmlspecialchars() —— 顯示原始碼而非移除

<?php
$str = "<font color=red>這是一個帶HTML標識的字串</font>";
$escaped = htmlspecialchars($str);
echo $escaped;
// 瀏覽器顯示:<font color=red>這是一個帶HTML標識的字串</font>
// 實際輸出:&lt;font color=red&gt;這是一個帶HTML標識的字串&lt;/font&gt;
?>
  • 用途:當你想「展示」HTML 代碼而非「渲染」它時使用(如代碼片段展示、防 XSS 輸出)。
  • 注意:這不是移除標籤,而是將 < > & " ' 轉為實體。

綜合對比表

方法適用場景處理速度健壯性推薦指數
strip_tags()通用純文本提取、表單輸入清洗快高(內置解析器)⭐⭐⭐⭐⭐
preg_replace()特殊規則、非標準標記、需保留特定標籤屬性中低(正則局限)⭐⭐
htmlspecialchars()輸出到 HTML 頁面防 XSS、代碼展示快高⭐⭐⭐⭐(不同用途)

最佳實踐建議

  1. 純文本存儲/搜索:入庫前用 strip_tags() 清洗,必要時配合 trim() 去除首尾空白。
  2. 防 XSS 輸出:輸出到頁面時統一用 htmlspecialchars($str, ENT_QUOTES, 'UTF-8')。
  3. 保留安全標籤:如允許用戶輸入 <b><i><a>,用 strip_tags($str, '<b><i><a>'),但仍需配合 HTML Purifier 等庫做深度過濾。
  4. 畸形 HTML:先用 tidy 或 DOMDocument::loadHTML() 修復,再 strip_tags()。

一行代碼總結

// 獲取純文本(推薦)
$text = strip_tags($html);

// 防 XSS 輸出
echo htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved