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

PHP 過濾 HTML 標籤的多種方法與最佳實踐

     編輯:PHP 相關知識

PHP 移除 HTML 標籤技術總覽

在處理使用者輸入、防止 XSS 攻擊或輸出純文字時,移除 HTML 標籤是常見需求。本文整理三種主流做法,從內建函式到自訂正則與手動解析,並說明適用情境與注意事項。

方法一:使用內建 strip_tags() 函式

最簡單、效能最好的方式,支援保留特定允許標籤:

<?php
$str = "hello <b>world!</b>";
echo strip_tags($str);           // 輸出:hello world!
echo strip_tags($str, '<b>');    // 輸出:hello <b>world!</b>(保留 <b>)

語法:string strip_tags(string $str, string $allowable_tags = '')

優點:原生支援、速度快、處理不完整標籤有容錯機制。
缺點:無法處理屬性內的惡意腳本(如 <img src=x onerror=alert(1)>),若需深度防護請搭配 HTML Purifier。

方法二:正則表達式過濾

保留段落與換行,移除其他標籤:

<?php
$reg = '/(<\/?p>|<br\s*\/?>)|<.+?>/i';
echo preg_replace($reg, '$1', $str);

適用於需保留特定排版標籤的情境,但正則處理巢狀或不完整 HTML 易出錯,維護成本較高。

方法三:自訂函式逐字元解析

手動掃描 < 與 > 並移除中間內容:

<?php
function delhtml($str) {
    $st = $et = -1;
    $stmp = ['&nbsp;'];
    $len = strlen($str);
    for ($i = 0; $i < $len; $i++) {
        $ss = substr($str, $i, 1);
        if (ord($ss) == 60) $st = $i;          // 遇到 <
        if (ord($ss) == 62) {                   // 遇到 >
            $et = $i;
            if ($st != -1) {
                $stmp[] = substr($str, $st, $et - $st + 1);
            }
        }
    }
    return str_replace($stmp, '', $str);
}

教學價值高,但效能較差且未處理 HTML 實體編碼,生產環境不建議使用。

方法四:深度淨化(推薦生產環境)

<?php
function clear_html_label($html) {
    $search = [
        "'<script[^>]*?>.*?</script>'si",
        "'<[/!]*?[^<>]*?>'si",
        "'([\r\n])[\s]+'",
        "'&(quot|#34);'i",
        "'&(amp|#38);'i",
        "'&(lt|#60);'i",
        "'&(gt|#62);'i",
        "'&(nbsp|#160);'i",
        // ... 更多實體對應
    ];
    $replace = ['', '', '\1', '"', '&', '<', '>', ' ', chr(161), chr(162), chr(163), chr(169), 'chr(1)'];
    return preg_replace($search, $replace, $html);
}

此法同時處理標籤移除與實體解碼,適合需還原純文字內容的場景。

實務建議

  • 輸出端防護:輸出 HTML 時用 htmlspecialchars() 轉義,而非儲存端移除標籤。
  • 富文本需求:若需保留部分排版,請使用 HTML Purifier 白名單機制。
  • 效能考量:大量資料處理優先用 strip_tags(),複雜規則才考慮正則或第三方庫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved