首頁 後端開發 php教程 為什麼 DOMDocument 會遇到 UTF-8 字元的問題以及如何修復它?

為什麼 DOMDocument 會遇到 UTF-8 字元的問題以及如何修復它?

Nov 04, 2024 am 09:55 AM

Why Does DOMDocument Struggle with UTF-8 Characters and How to Fix It?

DOMDocument 與UTF-8 字符的鬥爭:徹底調查

DOMDocument 是PHP 中的一個庫,旨在處理HTML,本質上HTML使用ISO-8859-1 編碼。但是,當嘗試將 UTF-8 編碼的 HTML 載入到 DOMDocument 實例中時,產生的輸出可能會顯示損壞的 utf-8 字元。

問題:

範例提供的程式碼嘗試載入以下UTF-8 編碼的HTML 字串:

<code class="html">&lt;html&gt;
&lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;title&gt;Test!&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;☆ Hello ☆ World ☆&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;</code>
登入後複製

但是,輸出包含HTML實體而非預期字元:

<code class="html">&lt;!DOCTYPE html&gt;
&lt;html&gt;&lt;head&gt;&lt;meta charset=&quot;utf-8&quot;&gt;&lt;title&gt;Test!&lt;/title&gt;&lt;/head&gt;&lt;body&gt;
    &lt;h1&gt;&amp;amp;acirc;&amp;amp;#152;&amp;amp;#134; Hello &amp;amp;acirc;&amp;amp;#152;&amp;amp;#134; World &amp;amp;acirc;&amp;amp;#152;&amp;amp;#134;&lt;/h1&gt;    
&lt;/body&gt;&lt;/html&gt;</code>
登入後複製

解:

解決此問題的主要方法有兩種:

1 .將字元轉換為HTML 實體:

PHP 的mb_convert_encoding 函數可以將US-ASCII 範圍以外的字元轉換為對應的HTML 實體。這確保 DOMDocument 可以正確解釋字串:

<code class="php">$us_ascii = mb_convert_encoding($utf_8, 'HTML-ENTITIES', 'UTF-8');</code>
登入後複製

2。指定編碼提示:

DOMDocument 可以透過新增Content-Type 元標記來提示HTML 字串的編碼:

<code class="html">&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;</code>
登入後複製

但是,直接加入元標記程式碼中的HTML 字元字串可能會導致驗證錯誤。為了避免這種情況,您可以載入不帶元標記的字串,並使用insertBefore 方法將其新增為head 元素的第一個子元素:

<code class="php">$dom = new DomDocument();
$dom-&gt;loadHTML($html);
$head = $dom-&gt;getElementsByTagName('head')-&gt;item(0);
$meta = $dom-&gt;createElement('meta');
$meta-&gt;setAttribute('http-equiv', 'content-type');
$meta-&gt;setAttribute('content', 'text/html; charset=utf-8');
$head-&gt;insertBefore($meta, $head-&gt;firstChild);
$html = $dom-&gt;saveHTML();</code>
登入後複製

透過使用這些方法中的任何一個,DOMDocument 都可以有效地處理UTF-8 編碼的HTML,確保非US-ASCII 字元的正確表示和解碼。

以上是為什麼 DOMDocument 會遇到 UTF-8 字元的問題以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門工具標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

11個最佳PHP URL縮短腳本(免費和高級) 11個最佳PHP URL縮短腳本(免費和高級) Mar 03, 2025 am 10:49 AM

11個最佳PHP URL縮短腳本(免費和高級)

在Laravel中使用Flash會話數據 在Laravel中使用Flash會話數據 Mar 12, 2025 pm 05:08 PM

在Laravel中使用Flash會話數據

6個額外的技能,每個PHP開發人員都應該擁有 6個額外的技能,每個PHP開發人員都應該擁有 Feb 28, 2025 am 10:52 AM

6個額外的技能,每個PHP開發人員都應該擁有

了解PHP中的陣列 了解PHP中的陣列 Feb 28, 2025 am 10:53 AM

了解PHP中的陣列

構建具有Laravel後端的React應用程序:第2部分,React 構建具有Laravel後端的React應用程序:第2部分,React Mar 04, 2025 am 09:33 AM

構建具有Laravel後端的React應用程序:第2部分,React

簡化的HTTP響應在Laravel測試中模擬了 簡化的HTTP響應在Laravel測試中模擬了 Mar 12, 2025 pm 05:09 PM

簡化的HTTP響應在Laravel測試中模擬了

php中的捲曲:如何在REST API中使用PHP捲曲擴展 php中的捲曲:如何在REST API中使用PHP捲曲擴展 Mar 14, 2025 am 11:42 AM

php中的捲曲:如何在REST API中使用PHP捲曲擴展

在Codecanyon上的12個最佳PHP聊天腳本 在Codecanyon上的12個最佳PHP聊天腳本 Mar 13, 2025 pm 12:08 PM

在Codecanyon上的12個最佳PHP聊天腳本

See all articles