首頁 >後端開發 >php教程 >為什麼我的 PHP DOMDocument::loadHTML() 無法正確處理 UTF-8 編碼?

為什麼我的 PHP DOMDocument::loadHTML() 無法正確處理 UTF-8 編碼?

Barbara Streisand
Barbara Streisand原創
2024-12-28 00:43:10169瀏覽

Why is my PHP DOMDocument::loadHTML() Not Handling UTF-8 Encoding Correctly?

PHP DOMDocument loadHTML 未正確編碼UTF-8

嘗試使用DOMDocument::loadHTML() 解析HTML 時,您可能會遇到問題使用正確的UTF-8 編碼。預設情況下,DOMDocument 將輸入字串視為 ISO-8859-1,這在處理 UTF-8 資料時可能會導致錯誤。

解決方案:

確保正確編碼,您可以採用各種方法:

  • 前編碼聲明: 新增XML 編碼聲明或HTML 元字元集聲明以指示UTF-8字元的存在:

    $contentType = '<meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;>';
    $dom->loadHTML($contentType . $profile);
  • 使用SmartDOMDocument: 如果輸入 HTML 可能已包含聲明,請使用 SmartDOMDocument函式庫來解決潛在的衝突:

    $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8'));
  • 替代方案: 在 PHP 8.2 中,使用 mb_encode_numericentity()進行更安全的編碼選項:

    $dom->loadHTML(mb_encode_numericentity($profile, [0x80, 0x10FFFF, 0, ~0], 'UTF-8'));

HTML5 注意事項:

DOMDocument 使用 HTML4 解析器。對於 HTML5 文檔,請考慮使用專為 HTML5 合規性而設計的替代 HTML 解析器。

範例:

以下程式碼示範如何使用 mb_convert_encoding() 來修正不正確的 UTF-8編碼:

$profile = "

イリノイ州シカゴにて、アイルランド系の家庭に、9人兄弟の5番目として

"; $dom = new DOMDocument(); $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8')); echo $dom->saveHTML();

以上是為什麼我的 PHP DOMDocument::loadHTML() 無法正確處理 UTF-8 編碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn