【问题标题】:PHP generated XML parsing failedPHP 生成的 XML 解析失败
【发布时间】:2013-05-14 06:44:14
【问题描述】:

在我使用 PHP 5.3.x 的 CodeIgniter 2.x 项目中,我使用以下函数将 Dom 文档呈现为 XML 响应。一切都很顺利。但是由于一些格式不正确的意外文本(根元素外的非空白文本),生成的 XML 解析失败。

function renderDOMAsXML(DOMDocument &$dom, $format = true, $status = 200){
    $dom->formatOutput  = $format;
    $controller         = &get_instance();

    $controller->output->set_status_header($status);
    $controller->output->set_header('Content-type: application/xml; charset=utf-8');
    $controller->output->set_output($dom->saveXML());
}

出于好奇,我将格式错误的意外文本(根元素外的非空白文本)解码为十六进制格式,如下所示。

\x00ef\x00bb\x00bf\x00ef\x00bb\x00bf\x00ef\x00bb\x00bf\x00ef\x00bb\x00bf\x00ef\x00bb\x00bf

\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}

或者像这样



我不知道出了什么问题。什么是格式错误的意外文本(根元素外的非空白文本)?他们有任何标题信息吗?当我想将其呈现为浏览器的 XML 响应时,我该如何跳过它们。

【问题讨论】:

  • 在没有 CI 方法的情况下输出 XML 以确定是 DOM 问题还是 CI 问题。
  • 这是 php 文件编码的问题,是我用 Unicode 编码创建一些文件的错误。

标签: php xml codeigniter domdocument


【解决方案1】:

其实你的代码没问题。只有 php file encoding 有问题。永远不要在 Unicode encoding 上保存任何文件,例如 UTF-8|Unicode|Unicodebig endian。仅将您的 php 文件保存为 ANSI Encoding。如果您使用 UTF-8|Unicode|Unicodebig endian 创建一个 php 文件,这些编码您的 php code 会自动echo 跟随格式错误的意外文本(根元素外的非空白文本)。

\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}

这就是为什么您最新的浏览器无法解析您的 xml 响应并导致 xml 解析错误的原因。实际上格式错误的意外文本(根元素外的非空白文本)可能是Unicode encoding文件格式的标题信息。

如果您使用 Unicode encoded php 文件,这些意外文本始终位于您响应的开头,但在您使用其他内容类型响应标头时不会中断。

如果您遇到此类问题,请尽快将所有文件编码转换为ANSI Encoding

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 2011-03-19
    • 2018-09-24
    相关资源
    最近更新 更多