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

PHP 偵測字串是否包含 HTML 標籤

     編輯:PHP 相關知識

快速判斷字串是否含 HTML 標籤,最簡單的方法是對比原字串與 strip_tags() 處理後的結果。本文提供一行式函式與進階正則版本,並說明適用場景與效能。

核心邏輯

function hasHtmlTags($str) {
    return $str !== strip_tags($str);
}

// 使用
var_dump(hasHtmlTags('

Hello

')); // true var_dump(hasHtmlTags('Hello World')); // false

原理說明

  • strip_tags() 會移除所有 HTML / PHP 標籤,保留純文字內容。
  • 若原字串含標籤,處理後長度必定變短(或內容改變),直接用 !== 比較即可。
  • 內建函式以 C 實作,速度極快,且正確處理巢狀、屬性、註解等複雜情況。

進階需求:允許特定標籤

function hasDisallowedTags($str, $allowed = '') {
    $stripped = strip_tags($str, $allowed);
    return $str !== $stripped;
}

// 僅允許  
var_dump(hasDisallowedTags('粗體')); // true (含 script)
var_dump(hasDisallowedTags('粗體斜體')); // false

正則替代方案(不建議常規使用)

function hasHtmlTagsRegex($str) {
    return preg_match('/<[^>]+>/', $str) === 1;
}
// 缺點:誤判 "<3" 為標籤、無法正確處理屬性內含 >、效能較差

效能測試參考 (10萬次迴圈)

方法耗時 (秒)備註
strip_tags 比對~0.12最快、最準確
preg_match~0.45較慢、邊界情況易出錯
strpos 檢查 < & > ~0.08最快但誤判率高 (如 "a

實務應用場景

  • XSS 防護前置檢查:儲存使用者輸入前,若偵測到標籤可選擇拒絕、轉義或清理。
  • 內容審核:自動標記含 HTML 的評論供人工複核。
  • 資料匯入驗證:CSV/Excel 匯入時,檢查欄位是否夾帶標籤。

完整範例:輸入過濾中介層

function sanitizeInput($input, $allowHtml = false) {
    if (is_array($input)) {
        return array_map(__FUNCTION__, $input);
    }
    if (!$allowHtml && hasHtmlTags($input)) {
        // 選項 1:拒絕
        // throw new InvalidArgumentException('輸入不得包含 HTML 標籤');
        // 選項 2:轉義
        return htmlspecialchars($input, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
        // 選項 3:清理 (僅保留安全標籤)
        // return strip_tags($input, '');
    }
    return $input;
}

$_POST = sanitizeInput($_POST);
$_GET  = sanitizeInput($_GET);

strip_tags 比對法是 PHP 偵測 HTML 標籤的黃金標準:簡潔、高效、零依賴,建議作為預設方案。

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