使用 PHP SimpleXML 输出 UTF-8


Outputting UTF-8 with PHP SimpleXML

我正在尝试解析从Wordpress的导出函数生成的XML文件。我已经从块中抓取了文本,但是当我回显文本时,它格式不正确,我认为是 ASCII。

<?php
header("Content-Type: text/plain; charset: UTF-8;");
$source = file_get_contents("blog.wordpress.2013-10-31.xml");
$xml = simplexml_load_string($source);
$items =  $xml->channel->item;
foreach($items as $item) {
    $namepsaces = $item->getNameSpaces(true);
    $content = $item->children($namepsaces['content']);
    if($content != '') {
        echo '#' . $item->title . "#'n";
        echo $content->encoded;
        echo "'n'n'n";
    }
}

所以As the BBC’s会变得As the BBC’s.反正我能阻止吗?

编辑:我已经附加了回显"测试"; 紧跟在标题之后,我在浏览器中看到"测试",所以这似乎不是 SimpleXML 问题。

由于 UTF-8 ' (0xE2 0x80 0x99) 是 WINDOWS-1252 € ™ 并且这正是您所描述的,因此您似乎将 UTF-8 编码字符串加载为 WINDOWS-1252。

当您从元素或属性中读取时,SimpleXML 的输出始终是 UTF-8 编码的,因此关于该部分,我认为您的代码没有问题。

因此,XML 文件更有可能暗示了错误的编码。修复它,你应该没问题(因为你没有显示那个文件,很难说到底需要改变什么以及为什么编码首先被混淆,也许是一些传输问题)。

在将 XML 文件发送到分析器之前,您可能需要重新编码该文件。如果是这样,XMLRecoder可能会有所帮助。

您在此处使用冒号:charset: UTF-8

正确的代码是

header('Content-Type: text/html; charset=utf-8');

检查 XML 文件开头为 <?xml version="1.0" encoding="UTF-8"?>