在我解析一些 XML 文件(通常是 RSS)时,遇到了包含如
Today’s Newest
这样的字符的文本,但在从节点中提取文本后,它会变成 Today’s Newest
。这告诉我我处理解码过程时存在错误。
我可以简单地 修补我的脚本 来修复这个 bug,但如果还有其他许多字符变成乱码怎么办呢?有没有正确的方法来处理 XML 文件,将其转换为 UTF-8 脚本而不损坏编码呢?
以下是我尝试过但似乎不太有效的一些方法:
$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);
’
问题!由于XML变得如此庞大,我停止使用CLI进行调试并转向浏览器。我简直不敢相信我忘记检查我的标头了!header('Content-Type: text/html; charset="UTF-8"');
- Xeoncross