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

PHP 將 HTML 完整轉換為純文本的實用方法

     編輯:PHP 相關知識

前言

在 PHP 開發中,經常需要將包含 HTML 標籤、JavaScript 代碼、特殊實體字符的網頁內容轉換為純文本,例如用於搜索摘要、內容預覽或數據清洗。本文介紹一種基於正則表達式的完整解決方案,能一次性處理標籤移除、腳本剔除、空白壓縮及實體解碼。

核心實現代碼

<?php
// $document 應包含一個 HTML 文檔字符串
// 本例將去除 HTML 標記、JavaScript 代碼和多餘空白字符
// 並將常見 HTML 實體轉換為對應的文本字符

$search = array(
    // 1. 移除 <script> 標籤及其內容(不區分大小寫、跨行匹配)
    "'<script[^>]*?>.*?</script>'si",
    
    // 2. 移除所有 HTML 標籤(包括註釋、閉合標籤等)
    "'<[/!]*?[^<>]*?>'si",
    
    // 3. 將換行符後的多個空白字符壓縮為單個空格
    "'([\r\n])[\s]+'",
    
    // 4-12. 替換常見 HTML 實體為對應字符
    "'&(quot|#34);'i",      // " → "
    "'&(amp|#38);'i",       // & → &
    "'&(lt|#60);'i",        // < → <
    "'&(gt|#62);'i",        // > → >
    "'&(nbsp|#160);'i",     //   → 空格
    "'&(iexcl|#161);'i",    // ¡ → ¡
    "'&(cent|#162);'i",      // ¢ → ¢
    "'&(pound|#163);'i",     // £ → £
    "'&(copy|#169);'i",      // © → ©
    "'&#(\d+);'e"           // 數字實體 → 對應字符(需 PHP 7.0+ 使用替代方案)
);

$replace = array(
    "",      // 移除 script
    "",      // 移除標籤
    "\1",    // 保留換行符,壓縮空白
    "\"",    // 雙引號
    "&",  // & 符號
    "<",   // 小於號
    ">",   // 大於號
    " ",     // 空格
    chr(161), // ¡
    chr(162), // ¢
    chr(163), // £
    chr(169), // ©
    "chr(\1)" // 數字實體轉換(注意:/e 修飾符已棄用)
);

$text = preg_replace($search, $replace, $document);
?>

關鍵點解析

正則表達式標記說明

  • s (PCRE_DOTALL):使點號 . 匹配換行符,實現跨行匹配
  • i (PCRE_CASELESS):不區分大小寫匹配
  • e (PREG_REPLACE_EVAL):已在 PHP 7.0 棄用,PHP 8.0 移除,現代版本請使用 preg_replace_callback

現代化改寫建議(PHP 7.0+)

<?php
function htmlToText($html) {
    // 移除 script 和 style 標籤及內容
    $html = preg_replace('/<(script|style)[^>]*>.*?<\/\1>/is', '', $html);
    
    // 移除 HTML 註釋
    $html = preg_replace('/<!--.*?-->/s', '', $html);
    
    // 移除所有標籤
    $html = preg_replace('/<[^>]++>/', '', $html);
    
    // 解碼 HTML 實體
    $html = html_entity_decode($html, ENT_QUOTES | ENT_HTML5, 'UTF-8');
    
    // 壓縮空白字符
    $html = preg_replace('/\s+/u', ' ', $html);
    
    return trim($html);
}
?>

使用場景與注意事項

  • 適用場景:RSS 摘要生成、搜索引擎索引、郵件純文本版本、內容審核預覽
  • 編碼一致性:確保輸入輸出均為 UTF-8,避免多字節字符截斷
  • 性能考量:大文檔處理時,考慮分塊處理或使用 DOMDocument 解析器
  • 安全提示:輸出前建議配合 htmlspecialchars 防止 XSS

總結

雖然正則表達式方案代碼簡潔,但現代 PHP 開發推薦使用 DOMDocument + html_entity_decode 組合,更健壯且符合最新標準。根據項目 PHP 版本選擇合適方案,並務必做好輸入驗證與輸出轉義。

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