我得到了json字符串:
$response = '{"retcode":"0","retmsg":"OK","cre_id_enc":"","cre_type":"","fee_type":"1","listid":"1221085301201410240000001024","out_trade_no":"201410246763831","partner":"1221085301","pay_fee":"0","sign":"PTamau\x2BjkynA00cASKJ6Nd3QwFSBP44TKSqmmdCd\x2F\x2B0o8ViSt3fp5vQr0Fc73U42NhtImfnHzbynoUjURiNLW5O4hI61xkG\x2F97JRPRE0nHuvtAumqXfbVCsLveugE52HRZsJvm3EG7pL6GlhYf8ng6qxiUrDyn89PFVZ04Wd8Gk\x3D","total_fee":"1000000","unfreeze_fee":"1000000","user_name_enc":""}';
我使用json_decode将此字符串转换为数组,但它返回“NULL”。
我发现"sign":"PTamau\x2BjkynA00cASKJ6Nd3QwFSBP44TKSqmmdCd\x2F\x2B0o8ViSt3fp5vQr0Fc73U42NhtImfnHzbynoUjURiNLW5O4hI61xkG\x2F97JRPRE0nHuvtAumqXfbVCsLveugE52HRZsJvm3EG7pL6GlhYf8ng6qxiUrDyn89PFVZ04Wd8Gk\x3D","total_fee":"1000000"
不能使用json_decode。
它包含ASCII代码,如'\ x2F','\ x2B','\ x3D'。
所以我尝试转换为utf8,就像这个$response = iconv('ASCII', 'UTF-8//IGNORE', $response);
一样。
它没用。响应字符串仍包含'\x2F' , '\x2B', '\x3D'
,json_decode
仍然返回NULL。
答案 0 :(得分:1)
根据非常similar question的答案,你需要逃避反斜杠:
$json = str_replace( '\x', '\\\\x', $response );
然后将$ json传递给json_decode
答案 1 :(得分:0)
问题是单引号。
print_r('\x2F');
\x2F
print_r("\x2F");
/
单引号不会解释反斜杠序列,这会留下格式错误的JSON,只允许\\
和\"
,AFAIK。如果你已经有了单反斜杠字符串,请执行Vasilis所说的内容。