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

PHP html_entity_decode 詳解:HTML 實體還原字符的完整指南

     編輯:PHP 相關知識

函數簽名與參數

html_entity_decode(
    string $string,
    int $flags = ENT_COMPAT | ENT_HTML401,
    ?string $encoding = null
): string

引號處理標誌($flags)

常量行為
ENT_COMPAT默認。僅解碼雙引號 ",忽略單引號
ENT_QUOTES解碼雙引號與單引號 " ' '
ENT_NOQUOTES不解碼任何引號

字符編碼支援

常用編碼:UTF-8(推薦)、ISO-8859-1、GB2312、BIG5、Shift_JIS 等。PHP 5.6+ 默認使用 default_charset 配置。

核心差異:html_entity_decode vs htmlspecialchars_decode

函數解碼範圍典型用途
html_entity_decode所有 HTML 實體(數字實體 Ӓ、十六進制 😀、命名實體 ©)還原富文本編輯器內容、解析第三方 HTML 數據
htmlspecialchars_decode僅 & < > " ' 五種基本實體還原 htmlspecialchars 輸出,性能更高
htmlentities編碼端:將所有可轉換字符轉為實體輸出用戶輸入防 XSS

實戰示例

<?php
$html = '&lt;div class=&quot;test&quot;&gt;E.V-Get.com&lt;/div&gt;';

// 1. 默認(不解碼單引號)
echo html_entity_decode($html);
// 輸出: <div class="test">E.V-Get.com</div>

// 2. 解碼所有引號
echo html_entity_decode($html, ENT_QUOTES);
// 輸出: 
E.V-Get.com
// 3. 指定編碼(處理中文實體) $zh = '&#20013;&#25991;'; // "中文" echo html_entity_decode($zh, ENT_QUOTES, 'UTF-8'); // 中文

常見坑點與避坑指南

  1. 雙重編碼問題:若字符串已經是純文本,再次調用會將 & 變為 &amp;。解決:先檢測是否包含實體,或使用 htmlspecialchars_decode。
  2. 編碼不匹配導致亂碼:傳入 GB2312 內容卻用 UTF-8 解碼。解決:明確指定第三參數,或統一項目編碼為 UTF-8。
  3. 無效實體被忽略:無法識別的實體會保持原樣(PHP 5.4+),舊版本可能返回空字符串。
  4. 性能考量:大量數據處理時,htmlspecialchars_decode 比 html_entity_decode 快 3-5 倍,僅需還原基本標籤時優先使用。

最佳實踐

  • 輸出用戶內容到 HTML:htmlspecialchars($input, ENT_QUOTES, 'UTF-8')
  • 從數據庫讀取富文本輸出:html_entity_decode($row['content'], ENT_QUOTES, 'UTF-8')
  • API 返回 JSON 時:不要 實體編碼,直接輸出 UTF-8 字符,由前端框架處理轉義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved