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

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

Patricia Arquette
Patricia Arquette原創
2024-12-11 19:59:15985瀏覽

Why is my PHP DOMDocument loadHTML function not handling UTF-8 encoding correctly?

PHP DOMDocument loadHTML 未正確編碼UTF-8

問題

您正在使用DOMDocument 解析HTML,但問題

您正在使用編碼值。 HTML 中的日文字被替換為亂碼,而直接透過 echo 輸出 HTML 字串時卻能正確顯示。

原因

DOMDocument 假定輸入字串為 ISO-8859-1預設(HTTP/1.1 預設字元集)。在解析 UTF-8 字串時,這種不正確的假設會導致誤解,從而導致亂碼出現。

解決方案

    為了確保DOMDocument 使用正確的編碼載入HTML 字串,您有以下幾個選項:
  1. 前置XML 編碼聲明或元字元集宣告:
  2. 在載入HTML 字串之前,新增。這會強制將字串視為 UTF-8。
  3. 使用 SmartDOMDocument:
  4. 另外部庫提供了一個 loadHTMLCharset 函數,可以自動偵測並處理正確的編碼。
  5. 將字串轉換為 HTML 實體:
  6. PHP 的 mb_convert_encoding 函式可以將 HTML 字串轉換為使用 UTF-8 編碼的 HTML 實體。將此轉換後的字串載入到 DOMDocument 中。
  7. 使用 mb_encode_numericentity
:此函數使用數位實體對高 ASCII 位元組進行編碼,確保即使在 ISO-8859-1 限制下也可以正確解析字串( PHP 8.2

範例

$profile = '<p>イリノイ州シカゴにて、アイルランド系の家庭に、9</p>';
$dom = new DOMDocument();

// Add meta charset declaration
$contentType = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
$dom->loadHTML($contentType . $profile);

echo $dom->saveHTML();
這是一個使用元字元集宣告的範例:

這將使用正確的UTF-8 編碼載入HTML 字串,保留原有的日文字。

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

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