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

PHP 將 HTML 內容轉換為純文本的實用函數

     編輯:PHP 綜合知識

需求背景

在內容摘要生成、郵件純文本版本、搜索引擎索引、API 返回純文本等場景,常需要將富文本 HTML 轉換為保留基本段落結構的純文本。單純使用 strip_tags() 會導致段落粘連、特殊實體未解碼、空白字符異常等問題。

增強版 html2text 函數

/is', '', $str);
    $str = preg_replace('//is', '', $str);

    // 2. 將塊級標籤轉換為換行標記
    $blockTags = ['br', 'p', 'div', 'blockquote', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'tr'];
    foreach ($blockTags as $tag) {
        $str = preg_replace('/<\/?' . $tag . '\b[^>]*>/i', '>>>>', $str);
    }
    // td/th 保留列分隔
    $str = preg_replace('/<\/?(td|th)\b[^>]*>/i', '', $str);

    // 3. 處理 HTML 實體
    $entityMap = [
        ' ' => ' ', '&' => '&', '<' => '<', '>' => '>',
        '“' => '"', '”' => '"', '‘' => "'", '’' => "'",
        '"' => '"', ''' => "'", ''' => "'",
    ];
    $str = strtr($str, $entityMap);

    // 4. 去除剩餘標籤
    $str = strip_tags($str);

    // 5. 解碼數字實體(如 〹)
    $str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');

    // 6. 清理多餘換行標記與空白
    $str = preg_replace('/(>>>>\s*)+/', "\n\n", $str); // 合併連續換行
    $str = preg_replace('/[ \t]+/', ' ', $str);        // 合併空白
    $str = trim($str);

    return $str;
}
?>

使用示例

$html = <<
    

標題

第一段內容,包含 空格 與粗體。

第二段
換行測試

  • 列表項1
  • 列表項2
HTML; echo html2text($html); /* 輸出: 標題 第一段內容,包含 空格 與粗體。 第二段 換行測試 列表項1 列表項2 */

函數設計要點解析

  1. 分階段處理:先移除無關標籤,再轉換結構標籤,再處理實體,最後去標籤、解碼、清理。
  2. 保留段落語義:將 <p>、<div>、<br> 等替換為統一換行標記 >>>>,最終合併為雙換行,保持閱讀節奏。
  3. 實體全面覆蓋:針對常見命名實體、數字實體、空格實體逐一轉換,避免殘留 &nbsp; 等干擾閱讀。
  4. 編碼安全:指定 ENT_QUOTES 並明確 UTF-8,防止多字節字符截斷。

擴展建議

  • 若需保留超鏈接地址,可在 strip_tags 前提取 <a href="..."> 並轉換為 [文字](URL) 格式。
  • 針對 Markdown 輸出,可進一步將 <strong> 轉 **、<em> 轉 * 等。
  • 大文本處理時考慮使用 DOMDocument 解析而非正則,健壯性更高。

總結

本函數在 strip_tags 基礎上增強了結構保留與實體處理,適合多數「HTML 轉純文本」的工程場景。實際使用時可根據業務對標籤映射規則進行微調。

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