PHP生成的XML解析失败


PHP generated XML parsing failed

我的CodeIgniter 2。PHP 5.3. 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响应时,如何跳过它们

实际上你的代码没有问题。唯一的问题是你的 php file encoding 。永远不要在 Unicode encoding 上保存任何文件,就像 UTF-8|Unicode|Unicodebig endian 一样。只保存您的php文件为 ANSI Encoding 。如果你创建了一个php文件 UTF-8|Unicode|Unicodebig endian 这些编码你的 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