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

PHP 過濾移除所有 HTML 標籤的兩種方法

     編輯:PHP 相關知識

方法一:strip_tags() 內置函數(推薦)

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);
}
?>

最佳實踐建議

  1. 輸出到 HTML:用 htmlspecialchars() 編碼,而非移除標籤。
  2. 純文本提取:strip_tags() + html_entity_decode() + trim()。
  3. 富文本安全過濾:使用 HTML Purifier 庫(Composer: ezyang/htmlpurifier),配置白名單標籤/屬性/樣式。
  4. 編輯器內容存儲:保留原始 HTML,輸出時按上下文編碼/過濾。

總結

日常開發首選 strip_tags() 配合允許標籤參數;安全敏感場景務必引入 HTML Purifier;切勿自造正則處理任意 HTML。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved