如何保持中国或其他外国语言,因为它们将它们转换成代码呢?(How to keep the Chine

2019-06-23 18:36发布

DOMDocument似乎中国的字符转换为代码,例如,

你的乱发 will become ä½ çš„ä¹±å‘

我如何才能让中国或其他外国语言,因为它们将它们转换成代码呢?

下面是我简单的测试,

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

如果我loadHTML之前添加此下方()

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

我得到的,

你的乱发

即使coverted代码将被显示为中国文字, 你的乱发 仍然不是你的乱发什么,我以后....

Answer 1:

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(总是)。



Answer 2:

对于类似问题的解决方案进行搜索时我只是在这个线程迷迷糊糊的,我正确加载HTML和做一些解析使用XPath等之后......我的文字最终是这样的:

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

这显示效果细腻的HTML的身体,但不会在样式或脚本标签正常显示(如中国设置的字体)。

要解决这个问题,做反向lauthiamkok做:

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

如果出于任何原因,第一个解决方法不为你工作,尝试这种转换。



Answer 3:

我敢肯定ä½ çš„ä¹±å'实际上是视窗拉丁语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?