如何保持中文或其他外语不变,而不是将它们转换为代码



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),但大多数情况下,字符集(原文如此!)是在您使用的字符串旁边提供的元信息,而不是在里面。为了使这更加复杂,元信息甚至位于字符串中。

无论如何,由于您没有共享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。

相关内容

  • 没有找到相关文章

最新更新