使用PHP SimpleXML输出UTF-8

时间:2013-10-31 15:10:11

标签: php utf-8 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。无论如何,我可以阻止这个?

编辑:我附加了echo'“Test”';在标题之后,我在浏览器中看到“测试”,所以这似乎不是SimpleXML问题。

3 个答案:

答案 0 :(得分:0)

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

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

因此,XML文件更有可能提示错误的编码。解决这个问题,你应该没事(因为你没有显示那个文件,很难说究竟需要改变什么,以及为什么编码首先混淆了,也许是一些转移问题)。

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

答案 1 :(得分:0)

您在这里使用冒号:charset: UTF-8

正确的代码是

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

答案 2 :(得分:0)

检查您的XML文件是否以 <?xml version="1.0" encoding="UTF-8"?>