我的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
。