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

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

Patricia Arquette
發布: 2024-12-11 19:59:15
原創
972 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板