2010-05-17 117 views
1

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

问题出在XML文件写完之后,我可以通过DreamWeaver打开它并阅读一切正常 - 但是当我将XML文件的URL输入到我的Web浏览器(IE或Firefox)时,我得到一个“XML解析错误:格式错误“浏览器中出现错误。当我在浏览器中查看>源代码时,XML文件看起来不完整 - 但是当我直接从服务器上打开文件时,它是完整的。

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

+0

此外,如果我通过DreamWeaver打开文件并执行“S​​ave As ...”,然后将新文件上传到服务器,我可以通过Web浏览器正确查看新文件。 – Chris 2010-05-17 16:24:27

+1

将“查看>源代码”复制并粘贴到XML文档中断处。 – mmattax 2010-05-17 16:27:34

+0

现在仔细观察,浏览器告诉我“在文本内容中发现了无效字符,处理资源时出错......”因此,当我从原始RSS源中读取它时,可能会出现编码。 XML真的很长,我不认为它会在这里粘贴它,但没有任何可疑的奇怪字符。 – Chris 2010-05-17 16:39:13

回答

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文件之前没有被正确解释。

0

那么,它可能的XML是在不同的编码到一个Web服务器指定的标头。这可能会搞砸了。

我建议你用Wireshark看数据是否为实际上被正确传递。还要看看XML文档本身及其内容编码,而不是Web服务器指定的编码。

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

0

它可以帮助有复制/粘贴的XML文件。

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

杰罗姆·瓦格纳

0

它是一个长镜头,但你可以检查,如果你设置了一个无效“的Content-Length”头。 这会导致浏览器部分下载文件。