php json字符串失败

u=3076216966,3694567847&fm=26&gp=0.jpg

今天Debug的时候遇到了个神奇的Bug

请求json接口的时候碰到问题,json string怎么解析不正确,json解析网站可以正确解析,而php json_decode一直报错,编码是utf-8,没有制表符\t,换行符\n和空格" ",且引号都是双引号。

json_decode得到的返回值是NULL,可以使用使用json_last_error()函数获取到的返回值来帮助我们判断出问题的原因。

json_last_error() : int
0 = JSON_ERROR_NONE No error has occurred
2 = JSON_ERROR_STATE_MISMATCH Invalid or malformed JSON
3 = JSON_ERROR_CTRL_CHAR Control character error, possibly incorrectly encoded
4 = JSON_ERROR_SYNTAX Syntax error
5 = JSON_ERROR_UTF8 Malformed UTF-8 characters, possibly incorrectly encoded PHP 5.3.3

我这边获取错误提示返回JSON_ERROR_SYNTAX
dump半天字符串发现错了几个字符长度,从而得知肯定多了一些奇奇怪怪的字符了(其实是不造为毛多了BOM头)。

解决方案

$result = 'JSON Content';
$result = trim($result, "\xEF\xBB\xBF");
$result = json_decode($result,true);

这样就能够正常的解析JSON了。

据小道消息,PHP当时设计并没有考虑到有这些奇葩头的存在

添加新评论

文章状态:已收录~