DOMDocument
似乎中国的字符转换为代码,例如,
你的乱发 will become ä½ çš„ä¹±å‘
我如何才能让中国或其他外国语言,因为它们将它们转换成代码呢?
下面是我简单的测试,
$dom = new DOMDocument();
$dom->loadHTML($html);
如果我loadHTML之前添加此下方()
$html = mb_convert_encoding($html, "HTML-ENTITIES", "UTF-8");
我得到的,
你的乱发
即使coverted代码将被显示为中国文字, 你的乱发
仍然不是你的乱发
什么,我以后....
DOM文档似乎中国的字符转换为代码[...]。 我如何才能让中国或其他外国语言,因为它们将它们转换成代码呢?
$dom = new DOMDocument();
$dom->loadHTML($html);
如果您使用的loadHTML
功能加载HTML块。 默认情况下, DOMDocument
预计该字符串是HTML的默认编码( ISO-8859-1
),但是最常见的字符集(原文如此!)旁边提供给你使用,而不是字符串里面的元信息。 为了让这更复杂,是元信息甚至里面的字符串。
反正你没有共享的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");
如果出于任何原因,第一个解决方法不为你工作,尝试这种转换。
我敢肯定ä½ çš„ä¹±å'
实际上是视窗拉丁语1(不ASCII,也有ASCII没有变音符号)。 某处前进的道路上你的UTF-8文本得到了保存与Windows拉丁文1 ....
文章来源: How to keep the Chinese or other foreign language as they are instead of converting them into codes?