簡體   English   中英

如何保留中文或其他外語而不是將它們轉換為代碼?

[英]How to keep the Chinese or other foreign language as they are instead of converting them into codes?

DOMDocument似乎將中文字符轉換為代碼,例如

你的亂發將成為ä½ çš„ä¹±å'

如何保留中文或其他外語,而不是將其轉換為代碼?

以下是我的簡單測試,

$dom = new DOMDocument();
$dom->loadHTML($html);

如果我在loadHTML()之前添加以下內容,

$html = mb_convert_encoding($html, "HTML-ENTITIES", "UTF-8"); 

我明白了

你的乱发

即使隱蔽的代碼將顯示為中文字符, 你的乱发 仍然不是你的亂發我追求的......

DOMDocument似乎將中文字符轉換為代碼[...]。 如何保留中文或其他外語,而不是將其轉換為代碼?

$dom = new DOMDocument();
$dom->loadHTML($html);

如果您使用loadHTML函數加載HTML塊。 默認情況下, DOMDocument期望該字符串采用HTML的默認編碼( ISO-8859-1 ),但最常見的是charset(sic!)是在您正在使用的字符串旁邊而不是在內部提供的元信息。 為了使這更復雜,元信息甚至在字符串內。

無論如何,由於您尚未共享HTML的字符串數據而您尚未指定編碼,因此很難具體說明發生了什么。

我假設HTML是UTF-8編碼的,但這不會在HTML字符串中發出信號。 因此,以下解決方案可以提供幫助:

$doc = new DOMDocument();
$doc->loadHTML('<?xml encoding="UTF-8">' . $html);

// dirty fix
foreach ($doc->childNodes as $item)
    if ($item->nodeType == XML_PI_NODE)
        $doc->removeChild($item); // remove hack
$doc->encoding = 'UTF-8'; // insert proper

它在最開始時注入一個編碼提示(並在加載HTML后將其刪除)。 從那時起, DOMDocument將返回UTF-8(一如既往)。

我在搜索類似問題的解決方案時偶然發現了這個問題,我在正確加載html並使用Xpath等進行一些解析之后...我的文本最終結果如下:

&#20320;&#30340;&#20081;&#21457;

這在HTML正文中顯示得很好,但在樣式或腳本標記中無法正確顯示(例如設置中文字體)。

解決這個問題,反向lauthiamkok做了:

$html = mb_convert_encoding($html, "UTF-8", "HTML-ENTITIES");

如果由於任何原因第一個解決方法不適合您,請嘗試此轉換。

我很確定ä½ çš„ä¹±å'實際上是Windows Latin 1(不是ASCII,ASCII中沒有變音符號)。 在某處你的UTF-8文本被保存為Windows Latin 1 ....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM