浏览器不读取整个XML文件

时间:2010-05-17 16:18:47

标签: php xml

我有一个由PHP脚本编写的XML文件。 XML文件的数据是从几个不同的RSS源收集的。 Cron作业每5分钟调用一次PHP脚本。 PHP脚本可能需要5-10秒才能编写XML文件。

问题在于:编写XML文件后,我可以通过DreamWeaver打开它并读取所有内容 - 但是当我将XML文件的URL输入我的Web浏览器(IE或Firefox)时,我得到了一个“XML解析”错误:格式错误“浏览器出错”。当我查看>浏览器中的源代码,XML文件显示不完整 - 但是当我直接从服务器上打开文件时,它就完成了。

任何人都知道这里发生了什么?

4 个答案:

答案 0 :(得分:0)

嗯,可能是XML与Web服务器在标头中指定的编码不同。这可能搞砸了。

我建议您使用Wireshark查看数据是否实际正确传递。另请参阅XML文档本身及其内容编码,而不是Web服务器指定的内容。

如果您从浏览器中执行“另存为...”并尝试打开结果,会发生什么?这可能会忽略标头中指定的内容编码,只是将文件转储到磁盘 - 如果我是对的,那么它应该在XML编辑器中正确打开。

答案 1 :(得分:0)

可以帮助复制/粘贴xml文件。

我怀疑Dreamweaver接受的是一个xml文件,它不是真正的xml(实体或xml保留字符的问题),或者你有编码问题。你有ASCII 127字符集以外的字符吗?

Jerome Wagner

答案 2 :(得分:0)

这是一个很长的镜头,但您可以检查是否设置了无效的“ Content-Length ”标头。 这将导致浏览器部分下载文件。

答案 3 :(得分:0)

答案最终处理来自原始RSS提要的编码。使用ISO-8859-1对原始订阅源进行编码,在将数据写入XML文件之前需要将其转换为UTF-8。

//Get Data from source URL
$xml = file_get_contents("http://www.sourceurl.com/someting.rss");
//Convert from ISO to UTF
$xml = mb_convert_encoding($xml, 'UTF-8', mb_detect_encoding($xml, 'UTF-8, ISO-8859-1', true)); 

完成此操作后,我可以遍历$ xml,但我需要将数据写入我的个性化XML文件。显然,ISO-8895-1编码中有一些字符在写入我的XML文件之前没有被正确解释。