php json字符串失败
# PHP
今天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当时设计并没有考虑到有这些奇葩头的存在