PHP JSON编码无效

Ofi*_*fir 4 php json encode utf-8

我正在使用PHP(5.3.1)中的一个项目,我需要将一个JSON字符串发送到webservice(在python中),但是我从json_encode获得的结果不会作为有效的JSON传递(我正在使用JSLint)检查有效性).

我应该补充一点,我正在尝试编码的结构相当大(13K编码),并且部分由UTF8数据组成,而json_encode确实处理它,我在结果中的奇怪位置获得空格.例如,我可以获得{"hello":tru e}或{"hell o":true},这会导致Web服务出错,因为JSON无效(或数据,如第二个示例中所示).

我也尝试使用Zend框架进行JSON编码,但这并没有太大的不同.

PHP中的JSON是否存在已知问题?有没有人遇到过这种行为并找到了解决方案?

Naz*_*riy 6

确保对象键不能包含空格或任何非unicode字符,不带引号的变量只能是布尔值,整数,浮点数,对象和数组值,应始终引用字符串.

另外,我建议你在json输出之前添加正确的标题.

if(!headers_sent())
   header('Content-Type: application/json; charset=utf-8', true,200);
Run Code Online (Sandbox Code Playgroud)

你也可以发布你传递给你的数组或对象json_encode吗?


Ewa*_*odd 6

您声明"我正在尝试编码的结构......部分由UTF8数据组成." 这意味着它也部分是非UTF8数据.该json_encode文档底部有一个评论

json_encode()期望字符串被编码为UTF8格式,而默认情况下PHP字符串是ISO-8859-1编码的.这意味着

json_encode(阵列( 'AU'));

将产生一个空字符串的json表示,而

json_encode(阵列(函数utf8_encode( 'AU')));

将工作.

由于非UTF8输入,JSON的失败段是?


Ofi*_*fir 3

前几天我正在处理一些自动生成的电子邮件,并注意到同样的奇怪行为(电子邮件正文中插入了空格),所以我开始检查电子邮件帖子并找到了罪魁祸首:

来自 SMTP RFC2821:

包含 的文本行的最大总长度为 1000 个字符(不包括为透明度而重复的前导点)。

我的电子邮件正文确实在一行中,因此用 \n 打破它解决了空格问题。