【问题标题】:Strange characters at beginning of XML AJAX response?XML AJAX 响应开头的奇怪字符?
【发布时间】:2011-06-16 17:44:30
【问题描述】:

我正在进行多个返回 XML 数据的 AJAX 调用。当我取回数据时,我的成功函数(在 JQuery 中)尝试将 XML 转换为 JSON(使用插件)。我很快就被提醒了为什么我不能假设我会从我的 AJAX 请求中获取 VALID XML——因为事实证明一些 XML 响应是无效的——导致 JSON 转换失败、脚本失败等。 ..

我的问题是:

  1. 检查的最佳方法是什么 AJAX 响应上的有效 XML?要么, 我应该尝试 JSON 转换,然后快速检查是否 JSON 对象是否有效?
  2. 在对 XML 进行故障排除时,我发现在 XML 响应的最开头有一些奇怪的字符。这是我的 Firebug 中的一张图片:

我应该尝试检测并去除这些字符的响应还是我的编码可能有问题?

感谢任何帮助!如果需要更多信息,请告诉我!

【问题讨论】:

  • 那些奇怪的字符被称为字节顺序标记 (BOM) - 这通常表示文本编码存在问题。没有作为答案发布,因为它不是答案,但这可能会帮助您找到答案。
  • 我将支持@MrEyes 所说的内容,此外,还评论说应该静默解析和隐藏 BOM。而且,如果它被显示,它应该作为单个字符出现。这表明来自您的 Web 服务器的字符编码或 MIME 类型导致浏览器认为您正在向其提供 Latin-1 数据。您能否提供 Firebug 响应的完整标头?
  • @Cons - 响应标头查看源内容类型文本/html; charset=utf-8 服务器 Microsoft-IIS/7.5 X-Powered-By PHP/5.2.13, ASP.NET Date Thu, 27 Jan 2011 18:19:14 GMT Content-Length 42645
  • 您可能希望将header('Content-type: application/xml'); 添加到生成此 XML 的 PHP 脚本中,然后查看它是否可以自行运行。

标签: php jquery xml ajax json


【解决方案1】:

当错误地解释为 ISO-8859-1 时,它是 UTF-8 byte-order mark

不能安全地去掉它,因为它只是一个更大问题的征兆。您的内容被编码为 UTF-8。在此过程中,您将其解码为 ISO-8859-1。如果您试图通过剥离 BOM 来隐藏问题,那么您只会在开始使用非 ASCII 字符后立即为更多问题做好准备。事情看起来有点正确的唯一原因是因为 ASCII 是 UTF-8 和 ISO-8859-1 的公共子集。

【讨论】:

  • 这也是 UTF-8 BOM 被错误地解释为 ISO-8859-9 和 ISO-8859-15。
【解决方案2】:

奇怪的字符是 Byte Order Mark 并且实际上是有效的 XML,在大多数情况下,您很可能可以毫无风险地直接删除它们。

【讨论】:

  • 不,只是剥离 BOM 是隐藏症状,而不是修复错误。它可能会再次回来咬你。详情见我的回答。
  • @Jim:如果 XML 数据的其余部分被读取为 UTF-8,那么 BOM 实际上是无关紧要的除非提供数据的服务器提供不同的字节序状态,如这就是它的全部含义。
  • @Lazarus:您为什么希望文件部分被解释为 ISO-8859-x,部分被解释为 UTF-8?这似乎不太可能,不值得一提。我什至想不出一个 API 可以让你故意这样做,更不用说意外了。
  • @Jim:他通过 Firebug 看到 BOM,而不是 API。在此基础上,在代码中调用的 XML 处理器很可能将文件识别为 UTF-8。即使在 XML 处理器中,我仍然可以找到无法处理 BOM 的实例,即使它是规范的一部分。
  • @Lazarus:我知道。我只是说,地球上几乎没有我能想到的软件能像你想象的那样工作。这包括 Web API、文件访问 API、字符串处理 API,当然还有 Firebug。如果他看到这样的 BOM,则内容被 UTF-8 解释为 ISO-8859-x 的可能性约为 100%,这意味着无论您是否剥离 BOM,只要出现任何非 ASCII 内容,他都会遇到问题或不。剥离 BOM 是隐藏问题的表面措施,而不是真正的解决方案。
猜你喜欢
  • 2011-09-09
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
相关资源
最近更新 更多