Php BOM随机出现在JSON回复中

Php BOM随机出现在JSON回复中,php,json,curl,byte-order-mark,Php,Json,Curl,Byte Order Mark,我正在使用JSON和cURL实现两台服务器之间的通信。问题是,有时会在JSON应答中打开括号之前追加BOM(字节顺序标记)。我成功地对其进行了裁剪并成功解析了JSON字符串,但考虑到JSON是由我自己的代码生成的,我不知道BOM来自何处 我正在使用json_encode()生成回复,并使用header()+echo打印,据我所知,json_decode()不会生成任何BOM表。相应的.php文件以UTF-8编码,其中没有BOM表(根据Notepad++)。除了cURL之外,我还尝试使用Chrom

我正在使用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时是否存在细微差别,以某种方式产生了这样的结果?我应该从哪里开始寻找问题的根源以及可能的解决方案?

我也有同样的问题。我从PHP输出json,页面顶部还包含其他类文件。这些文件什么也不输出,但当它们被包含时,我得到的字节顺序标记和包含的文件一样多。因此,如果我有4个include,那么在我的json开始时我也有4个bom

我确保includes没有打印任何数据,并且在PHP标记之外也没有杂散的回车。我尝试了诸如“applicationjson”之类的标题,但没有任何效果

最后,我只是用记事本++打开每个PHP文件,转到“编码”并将其从UTF-8更改为ANSI,然后保存。这就是使其工作并返回有效json所需的全部。我根本没有对PHP进行任何代码更改


这种解决方案仍然感觉不太理想。由于我们没有从这些包含的文件中输出任何内容,因此不应该有任何内容受到影响。

您的JSON是否包含任何多字节字符?如果没有明确地将BOM放在那里,我能想到的BOM出现的唯一原因是,如果PHP出于某种原因确定有必要将BOM放在那里。。。另外,出于兴趣,相关的PHP版本是什么?不,JSON回复根本不包含多字节字符。我使用的是PHP5.3.8,您是否在回显之前随时将JSON转储到文件中?此BOM源于打开前的一个PHP脚本
No,我没有将JSON保存到文件中(因此,没有读取任何文件)。所以,如果我的任何项目文件(比如,所有)包含这个讨厌的BOM表,那么它可能会以某种方式影响结果JSON回复?这就是PHP解释器的工作方式。任何不在
内的内容都将被逐字输出。BOM就在文件的开头(前3个字节),所以在
之前,只需去掉PHP结束标记。这还可以防止“已发送的邮件头”问题。使用“不带BOM的UTF-8”将更好地为您服务。您不希望源代码仅仅为了删除BOM而被编码在一个模糊的ANSI代码页中。