4

在我正在解析的一些 XML 文件(通常是 RSS)中,我遇到了包含字符的文本,这些字符在我从节点中提取文本之后Today’s Newest会变成这样。Today’s Newest这告诉我我处理解码过程不正确

我可以简单地修补我的脚本来修复这个错误,但是如果有许多其他字符变得乱码怎么办?在将 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);
4

2 回答 2

1

检查你如何输出你的内容。如果输出目标不支持 UTF-8,也会发生这种情况。

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

如果上面没有帮助,也尝试使用DOMDocument加载 XML

于 2012-08-09T15:29:59.917 回答
1

试试这个:

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

于 2012-08-09T15:22:24.837 回答