问题
php中使用json_decode时,发现decode出来的结果是NULL。看日志,传入的参数的确是一个合法的json字符串,但decode之后却是为空,实在是让人抓不住头脑。
调试
想到php里面有个 json_last_error 的方法,根据官方说法,会返回 JSON 编码解码时最后发生的错误。加上后一看,果然,decode出问题了。返回的错误是 JSON_ERROR_CTRL_CHAR,表示控制字符错误,可能是编码不对。
这难道是字符串里面混入了控制字符?不多想,遂上网查了下解决方法。
解决
解决方法其实很简单,就是执行一个正则表达式搜索和替换控制字符
preg_replace( '/[\x00-\x1F]/','',$str);