PHP DOMDocument loadHTML 未正確編碼UTF-8
問題
您正在使用DOMDocument 解析HTML,但問題
您正在使用編碼值。 HTML 中的日文字被替換為亂碼,而直接透過 echo 輸出 HTML 字串時卻能正確顯示。
原因
DOMDocument 假定輸入字串為 ISO-8859-1預設(HTTP/1.1 預設字元集)。在解析 UTF-8 字串時,這種不正確的假設會導致誤解,從而導致亂碼出現。
解決方案
為了確保DOMDocument 使用正確的編碼載入HTML 字串,您有以下幾個選項: 前置XML 編碼聲明或元字元集宣告:- 在載入HTML 字串之前,新增或。這會強制將字串視為 UTF-8。
使用 SmartDOMDocument:- 另外部庫提供了一個 loadHTMLCharset 函數,可以自動偵測並處理正確的編碼。
將字串轉換為 HTML 實體:- PHP 的 mb_convert_encoding 函式可以將 HTML 字串轉換為使用 UTF-8 編碼的 HTML 實體。將此轉換後的字串載入到 DOMDocument 中。
使用 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中文網其他相關文章!