【问题标题】:Web server response generates UTF-8 (BOM) JSONWeb 服务器响应生成 UTF-8 (BOM) JSON
【发布时间】:2015-10-23 07:44:26
【问题描述】:

我有一个 ZF2 应用程序,它使用以下方法返回 JSON 格式的数组:

$response->setContent(json_encode($reponse));
return $response;

请求是使用 jQuery 1.10.2 通过 Ajax 发送的,当我使用开发人员模式或 Fiddler 截获响应正文时,我可以在 http://jsonlint.com/ 中看到 JSON 无效。因此,我的 Ajax 成功回调是使用 IE8 触发的,但使用更新的版本或浏览器(例如 Firefox 或 Chrome)时,它会直接转到错误回调。

似乎JSON的无效是由第一个大括号引起的,当我重新输入它时,似乎还可以。因此,我怀疑文件开头有一些 BOM 字符。

更奇怪的是,使用完全相同的源代码,我的客户在他的环境中使用 Internet Explorer 10 完全没有问题。

你们知道什么会导致我们的 PHP/Apache 环境出现这种差异吗?

感谢您的帮助。 问候,

【问题讨论】:

  • 你有链接吗?因为这是验证 BOM 是否是问题的最简单方法。
  • 我的环境仅限本地。我已将返回的 JSON 保存在一个文件中并放在那里:mentinet.fr//so/test.json 感谢您的帮助。
  • 我下载了文件并在十六进制编辑器中打开它;前三个十六进制值是 \xEF\xBB\xBF,这是 UTF-8 BOM 签名。 BOM 签名可能由您的编辑器设置,您也应该禁用它。
  • 在我的编辑器中,我无法选择 UTF-8 和 BOM,只有 UTF-8。这将如何解释完全相同的文件(只是解压缩)在我的客户环境而不是我的环境中工作?
  • 你用的是什么编辑器?你的客户是如何合作的?你的环境和你的客户环境有什么不同等等。我们的信息太少了。我只能得出结论,您的文件具有 UTF-8 BOM。

标签: php jquery ajax json byte-order-mark


【解决方案1】:

问题确实是由某些文件中出现的一些BOM字符引起的。

我的 config.Global.conf 文件是用 UTF8 编码的(带有 BOM),而且它在开头有 <feff><feff> ,我可以在用 VIM 打开它时看到它。

我通过从我的配置文件中删除这些额外的 BOM 字符,并将 UTF8(带 BOM)文件转换为 UTF8 w/o BOM 来解决此问题。

在此处查看我如何找出导致问题的文件:Find source of BOM in Zend Framework 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2018-10-28
    • 2010-11-25
    • 2021-12-21
    • 2011-07-21
    相关资源
    最近更新 更多