【发布时间】: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