BOM被添加到任何退货或模具响应中

时间:2017-01-04 12:34:32

标签: php json byte-order-mark

我正在使用jQuery从端点检索json响应

die(json_encode(array('success' => 3, 'message' => 'You must use at least 1 credit or more.')));

每当我检查Chrome开发人员工具中收到的JSON响应时,我都会看到一个红点,表示在json响应之前添加了\ ufeff。我在Notepad ++中使用UTF-8对PHP文件进行了编码,但它仍然添加了任何响应的BOM字符。如果我返回任何内容或更改模具,它仍会在响应中显示BOM字符。

我在我的localhost上尝试了相同的文件,但它的工作方式非常好,但是在服务器上添加了该字符。

我对导致问题的原因感到茫然,我们将非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

这是13 year old issue

有一些解决方法(在脚本启动时删除所有PHP文件中的BOM,ob_clean),但真正的解决方案是使用--enable-zend-multibyte--enable-mbstring编译PHP,或者等到它由PHP团队修复。

由于您有时无法控制托管环境中的PHP版本和编译标记,因此我更倾向于从所有PHP文件中删除BOM,以防止出现此类问题。这适用于任何服务器。

您的解决方案是使用JS修复输出。但对于其他用途,例如通过PHP生成图像或其他二进制数据,或发送标题,你无法解决这个问题。

答案 1 :(得分:0)

这似乎是这个服务器配置的一个问题,因为它适用于其他服务器。与此同时,我在解析JSON响应之前使用javascript过滤了响应以删除任何BOM字符。