我正在使用JSON和cURL实现两台服务器之间的通信。问题是,有时在JSON回复中打开括号之前附加了BOM(字节顺序标记)。我已经设法修剪它并成功解析JSON字符串,但考虑到JSON是由我自己的代码生成的,我不知道,该BOM来自何处。
我正在使用json_encode()来生成回复和header()+ echo来打印它,据我所知,json_decode()不会生成任何BOM。相应的.php文件以UTF-8编码,并且没有BOM(根据Notepad ++)。除了cURL之外,我还尝试使用Chrome和python(urllib2)执行请求。虽然Chrome根本没有注册任何BOM,但python经常无法解析传入的JSON。
那么,使用echo是否存在一些细微差别,以某种方式产生这样的结果?我应该从哪里开始寻找问题的根源以及可能的解决方案?
答案 0 :(得分:1)
我遇到了同样的问题。我从PHP输出json,页面顶部还包含其他类文件。这些文件没有输出任何内容,但是当它们被包含在内时,我获得了与包含文件一样多的字节顺序标记。所以,如果我有4个包含,我在json的开头也有4个BOM。
我确保包含没有打印任何数据,并且PHP标记之外没有杂散回车。我尝试了诸如“application-json”之类的标题,但没有任何效果。
最后,我只是在记事本++中打开每个PHP文件,转到“编码”并将其从UTF-8更改为ANSI,然后保存。这就是让它工作所需的一切并返回有效的json。我根本没有对PHP进行代码更改。
这种解决方案仍然感觉不太理想。由于我们没有从这些包含的文件中输出任何内容,因此不应该有任何影响。