【问题标题】:Browser Not Reading Entire XML File浏览器未读取整个 XML 文件
【发布时间】:2010-05-17 16:18:46
【问题描述】:

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

问题是:编写 XML 文件后,我可以通过 DreamWeaver 打开它并读取所有内容 - 但是当我将 XML 文件的 URL 输入到我的 Web 浏览器(IE 或 Firefox)中时,我得到一个“XML Parsing错误:格式不正确” 浏览器中的错误。当我在浏览器中执行 View > Source 时,XML 文件显示不完整 - 但是当我直接从服务器打开文件时,它是完整的。

有人知道这里发生了什么吗?

【问题讨论】:

  • 另外,如果我通过 DreamWeaver 打开文件并执行“另存为...”,然后将该新文件上传到服务器,我可以通过 Web 浏览器正确查看新文件。跨度>
  • 复制并粘贴“查看 > 源代码”并粘贴到 XML 文档中断的位置附近。
  • 现在仔细看,浏览器告诉我“在文本内容中发现了一个无效字符。错误处理资源......”所以当我从原始文件中读取它时,它可能与编码有关RSS订阅。 XML 真的很长,我不认为它可以粘贴在这里,但没有任何明显奇怪的字符。
  • 只需发布几行直到 XML 中断的地方。
  • 我也遇到过这种情况,我有一个无效的换行符或空格字符,这让我很困惑并且很难看到。看看删除任何空行是否有帮助。

标签: php xml


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    复制/粘贴 xml 文件会有所帮助。

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

    杰罗姆·瓦格纳

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        答案最终处理了来自原始 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 文件之前没有被正确解释。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-10-30
          • 1970-01-01
          • 2021-11-28
          • 2011-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-14
          相关资源
          最近更新 更多