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

PHP HTML 標籤過濾實戰技巧:strip_tags 進階應用與圖片保留策略

     編輯:PHP 相關知識

在 PHP 開發中,處理使用者輸入的 HTML 內容是常見需求。許多開發者習慣使用 htmlspecialchars() 進行轉義,但實際上 strip_tags() 提供了更靈活的過濾機制,能夠精確控制允許保留的標籤。

核心函數對比

htmlspecialchars() 會將所有特殊字符轉換為 HTML 實體,導致原本合法的標籤(如 <b>、<p>)以純文本形式顯示。而 strip_tags() 可通過第二個參數指定允許保留的標籤清單,例如:

$safe_html = strip_tags($input, '<p><br><strong><em>');

這樣既能移除腳本、iframe 等危險標籤,又能保留基本排版功能。

進階需求:保留圖片並優化佈局

若業務需要保留圖片(<img>),直接放行該標籤可能引入外鏈風險。更優雅的方案是「二次處理」:

  1. 使用正則提取所有圖片 src 屬性;
  2. 將正文中的 <img> 標籤全部移除;
  3. 在內容末尾或側邊欄動態重新渲染圖片集,類似微博/ QQ 空間動態的「九宮格」佈局。

此法兼顧安全與體驗,還能統一圖片尺寸、添加懶加載屬性。

代碼示例

function filter_content($html) {
    // 1. 保留基礎排版標籤
    $allowed = '<p><br><strong><em><ul><ol><li>';
    $clean = strip_tags($html, $allowed);

    // 2. 提取圖片
    $images = [];
    preg_match_all('/<img[^>]+src=["\']([^"\']+)["\'][^>]*>/i', $html, $matches);
    if (!empty($matches[1])) {
        $images = array_unique($matches[1]);
    }

    // 3. 移除原圖片標籤(已在 strip_tags 中被剔除)
    // 4. 返回結構化數據供前端渲染
    return [
        'html' => $clean,
        'images' => array_values($images)
    ];
}

最佳實踐建議

  • 結合 HTMLPurifier 庫處理複雜 XSS 場景;
  • 對提取的圖片 URL 執行域名白名單驗證;
  • 前端使用 CSS Grid / Flexbox 實現響應式圖片牆。

掌握這套「過濾 + 提取 + 重構」流程,能顯著提升內容安全性與呈現質量。

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