[英]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等進行一些解析之后...我的文本最終結果如下:
你的乱发
這在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.