【问题标题】:Outputting UTF-8 with PHP SimpleXML使用 PHP SimpleXML 输出 UTF-8
【发布时间】:2013-10-31 15:10:10
【问题描述】:

我正在尝试解析从 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”';到标题之后,我在浏览器中看到“Test”,所以这似乎不是 SimpleXML 问题。

【问题讨论】:

  • AFAIK Wordpress 导出功能不会导出有效的 XML,它可能也无法正确处理字符和传输编码。请确保 XML 有效,然后再假设错误出现在您的问题代码中。
  • 它不是 US-ASCII,它更像是一些 Latin-1 或 Windows-1252 - 但编码为 UTF-8,显示为 UTF-8,然后再次编码为 UTF-8 以显示为你的问题。 - 很可能只是fileformat.info/info/unicode/char/2019/index.htm
  • 它现在已修复,我认为这是我 Mac 上 PHP 的问题。我通过自制软件安装了 PHP 5.5.5,但 LaunchAgents 中的 plist 文件仍然指向 5.5.1。我不知道,我已经解决了这个问题,重新启动并瞧,一切看起来都应该。

标签: php utf-8 simplexml


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    正确的代码是

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

    【讨论】:

      【解决方案3】:

      检查您的 XML 文件以 &lt;?xml version="1.0" encoding="UTF-8"?&gt;

      【讨论】:

        猜你喜欢
        • 2015-06-04
        • 2016-03-11
        • 1970-01-01
        • 2011-07-04
        • 2014-10-10
        • 1970-01-01
        • 2019-05-23
        • 1970-01-01
        • 2013-10-16
        相关资源
        最近更新 更多