如何正确解码XML文件中的特殊字符?

时间:2012-08-09 15:14:27

标签: php xml unicode character-encoding libxml2

在我正在解析的一些XML文件中(通常是RSS),我运行的文本包含Today’s Newest之类的字符,在我从节点中提取文本后,这些字符变为Today’s Newest。这告诉我我正在处理解码过程错误

我可以简单地patch my script修复这个错误,但是如果还有许多其他字符变得乱码怎么办?在将XML文件转换为UTF-8脚本时,如何在不破坏编码的情况下消化XML文件的正确方法是什么?

以下是我尝试过的一些似乎不太有效的事情:

$xml = file_get_contents($file);

// One: still contains ’
//$xml = @iconv('UTF-8', 'UTF-8//IGNORE', $xml);

// Two: LibXMLError Entity 'rsquo' not defined
//$xml = htmlentities($xml, null, 'UTF-8');
//$xml = htmlspecialchars_decode($xml, ENT_QUOTES);

// Three: still contains ’
//$xml = mb_convert_encoding($xml, "UTF-8", "UTF-8");

$xml = simplexml_load_string($xml, null, LIBXML_NOCDATA | LIBXML_NOENT);

2 个答案:

答案 0 :(得分:1)

尝试一下:

$xml = simplexml_load_string($xml, null, LIBXML_NOCDATA | LIBXML_NOENT); $xml->addAttribute('encoding', 'UTF-8');

答案 1 :(得分:1)

检查输出内容的方式。 如果输出目标不支持UTF-8,也可能发生这种情况。

我假设您输出到浏览器,因此检查浏览器编码并尝试将其显式设置为UTF-8,因为您可能从XML获取正确的文本但它只显示错误。

如果上面没有帮助

,请尝试使用DOMDocument加载XML
相关问题