【发布时间】:2011-09-22 09:24:09
【问题描述】:
我正在使用 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 是否有一些细微差别,会以某种方式产生这样的结果?我应该从哪里开始寻找问题的根源以及可能的解决方案?
【问题讨论】:
-
您的 JSON 是否包含任何多字节字符?如果您没有明确地放一个 BOM,我能想到出现 BOM 的唯一原因是,如果 PHP 出于某种原因确定有必要存在一个 BOM……另外,出于兴趣,什么是/是相关的 PHP 版本?
-
不,JSON 回复根本不包含多字节字符。我正在使用 PHP 5.3.8
-
您是否在回显之前随时将 JSON 转储到文件中?
-
此 BOM 源自您在打开
<?php标记之前的一个 PHP 脚本。使用真正的文本编辑器,无法找到十六进制编辑器。 -
不,我不会将 JSON 保存到文件中(因此,不会从任何文件中读取)。所以,如果我的任何项目文件(例如,根本没有)包含这个讨厌的 BOM,它有可能以某种方式影响了结果 JSON 回复?
标签: php json curl byte-order-mark