<?php
$rm = '5e
{"return":"error","errorcode":400,"errorinfo":"\u7528\u6237\u540d\u5df2\u88ab\u6ce8\u518c"}
0'; //注意这里面有2个换行符,在5e后面和0前面
$a_rm = explode("\r\n", $rm);
$a_rm1 = $a_rm[1];
echo $a_rm1;
echo "<pre>";var_dump(json_decode($a_rm1, true));
?>结果如下:
  {"return":"error","errorcode":400,"errorinfo":"\u7528\u6237\u540d\u5df2\u88ab\u6ce8\u518c"}NULL
这样不行,,下面的方法可以。为什么呢?
$aa = '{"return":"error","errorcode":400,"errorinfo":"\u7528\u6237\u540d\u5df2\u88ab\u6ce8\u518c"}';
var_dump(json_decode($aa))
难道有什么隐式符号?

解决方案 »

  1. &#65279;
    echo $a_rm1; 后查看原文件,就可看到
      

  2. 我在控制台执行,结果explode以后是这种情况。怪不得不行呢? 可是为什么这样呢?Array
    (
        [0] => 5e
        [1] => 锘縶"return":"error","errorcode":400,"errorinfo":"\u7528\u6237\u540d\
    u5df2\u88ab\u6ce8\u518c"}
        [2] => 0
    )
    <pre>NULL
    本来以为是“\r\n”的问题,把程序改成以下样子:
    $rm = '5e|{"return":"error","errorcode":400,"errorinfo":"\u7528\u6237\u540d\u5df2\u88ab\u6ce8\u518c"}|0';
    $a_rm = explode('|', $rm);
    $a_rm1 = $a_rm[1];
    print_r($a_rm);
    echo "<pre>";var_dump(json_decode($a_rm1, true));
    结果是:
    Array
    (
        [0] => 5e锘
        [1] => {"return":"error","errorcode":400,"errorinfo":"\u7528\u6237\u540d\u5d
    f2\u88ab\u6ce8\u518c"}
        [2] => 0
    )
    <pre>array(3) {
      ["return"]=>
      string(5) "error"
      ["errorcode"]=>
      int(400)
      ["errorinfo"]=>
      string(21) "鐢ㄦ埛鍚嶅凡琚敞鍐?
    }还是出现一个“锘” 郁闷!
      

  3. 编码改为utf-8 就好了。注意去掉 BOM头。