header("Content-Type: text/html;charset=utf-8");
$data=$redis->hGetAll("$label");   //从redis读数据;$data包括两个元素:name为GB2312汉字,k1为二进制数据
       
//解压二进制数据
$doc= (string)$data['k1'];
$format = 'itime/flast/fop/fhi‘;
$arr0 = unpack($format,$doc);//合并解压后数据$arr0与$l两个数组
$l["label"]=$label;$l["name"]=iconv('GB2312','UTF-8//IGNORE',(string)$data['name']);//转换GB2312汉字为UTF-8
$arr=array_merge($l,$arr0);//追加至$res数据,返回数据
array_push($res['data'],$arr);
echo json_encode($res);
        循环执行上述代码时总不能输出正确数据。单独输出解压后的二进制数据没问题,单独转换GB2312汉字为UTF-8输出也没问题。但两者放一起,要么输出name为null、要么数据变乱,同时语句顺序对结果也有影响。
请高手指点。

解决方案 »

  1.   

    需要看到原始数据,才能判断是否是算法问题
    echo base64_code(serialize($daya));
    贴出结果
      

  2.   

    array(2) { ["k1"]=> string(48) "d>�Y�G�@ף�@33�@ף�@\��@�k>K�B�B��F" ["name"]=> string(8) "�����۾�" }
     array(2) { ["k1"]=> string(48) "d>�Y�eA��dA��dA)\cA�cA A���K�B�C��F" ["name"]=> string(8) "�㶫����" }
    这是var_dump($data);的数据。
    echo base64_code(serialize($data['k1']));无显示数据。
      

  3.   

                $l["label"]=$label;$l["name"]=iconv('GB2312','UTF-8//IGNORE',$doc['name']);
                print_r($l);
                echo $l["name"];
    这几句话,结果name为空。
      

  4.   

               name能出来了。但unpack处有问题,页面显示502错误            $l["label"]=$label;$l["name"]=iconv('GB2312','UTF-8//IGNORE',$data['name']);
                //print_r($l);echo $l["name"];
                $format = 'it/fl/fo/fh/flo/fcl/fv/fam/fop/fb/fs/ftotlVo';
                $arr0 = unpack($format,$data['k1']);//不能执行
      

  5.   

    echo base64_encode(serialize($data));
      

  6.   

    echo base64_encode(serialize($data))结果:
    YToyOntzOjI6ImsxIjtzOjQ4OiKYBKBZAKwsRoUMLUZ70DBGe9csRnFhMEYAADBBAAAAAAAAAAAAAAAAAAAAAAAYDEYiO3M6NDoibmFtZSI7czoxMjoiuuPJ+rn6xvPWuMr9Ijt9
    YToyOntzOjI6ImsxIjtzOjQ4OiK4859ZuP7ERHENxUSFM8VEKWTERDP7xEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxMToizKm5+lNFVNa4yv0iO30=
    YToyOntzOjI6ImsxIjtzOjQ4OiJcBKBZH9j2RuFy90ZhfPdGGnT2Rh/Y9kYAAAAAAAAAAAAAAAAAAAAAAAAAAAAcEEYiO3M6NDoibmFtZSI7czoxNjoi06G2yMPPwvJTRU5TRVgzMCI7fQ==
    YToyOntzOjI6ImsxIjtzOjQ4OiK4xaBZuD6DRJpZg0TXo4RESFmDRK6PhEQAAAAAAAAAAAAAAAAAAAAAAAAAAADI6kYiO3M6NDoibmFtZSI7czoxMzoitu3C3su5UlRT1rjK/SI7fQ==
    YToyOntzOjI6ImsxIjtzOjQ4OiLARaBZ1wu4RFIQuETs4bhEj8q3RMP1t0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToiuLvKscW31t7PyMf9MzAwIjt9
    YToyOntzOjI6ImsxIjtzOjQ4OiLARaBZrlGVRa5RlUX2EJZFhdOURYU1lUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToiuLvKscW31t7PyMf9ODDWIjt9
    YToyOntzOjI6ImsxIjtzOjQ4OiLARaBZj0SBRRRMgUUU8IFFuBSBRQBAgUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNjoiuLvKscW31t7PyMf9MTAw1iI7fQ==
    YToyOntzOjI6ImsxIjtzOjQ4OiIoR6BZe3jnRXt450U9fOhFrkvnRa5L50UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToi06K5+ri7yrExMDDWuMr9Ijt9
    YToyOntzOjI6ImsxIjtzOjQ4OiL0PqBZUuh8RFLofETD9X1Erod8RK6HfEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNjoitaTC87jnsb65/rj5MjDWuCI7fQ==
    YToyOntzOjI6ImsxIjtzOjQ4OiL8RaBZ9sxyRfbMckVmbnRFCodyRcM1c0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNjoit9LAvLrVtvvQwbv5MjXWuCI7fQ==
    YToyOntzOjI6ImsxIjtzOjQ4OiLARaBZrj/ARK4/wETX88FECj/ARD2awEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToiyPC15Mu5tcK457b7xKYzIjt9
    YToyOntzOjI6ImsxIjtzOjQ4OiIoR6BZZsYBRBSuAURIAQJErlcBROFaAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNjoiusnAvLCixLfLuczYtaTWuCI7fQ==
    YToyOntzOjI6ImsxIjtzOjQ4OiL8RaBZrktXRVJ4V0XsWVhFUoxWRSkYV0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToixbfW3su5zdC/yzUw1rjKIjt9
    YToyOntzOjI6ImsxIjtzOjQ4OiL8RaBZSEG7Qwp3u0NSGLxDzQy7Q+wxu0MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNjoixbfW3su5zdC/yzYwMNa4yiI7fQ==
    YToyOntzOjI6ImsxIjtzOjQ4OiIoR6BZ1990RRQWdUVIfXVFXBt0RVwbdEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxMjoiscjA+8qxMjDWuMr9Ijt9
    YToyOntzOjI6ImsxIjtzOjQ4OiIoR6BZCsmfRdcLoEVmqKBFFFSfRaSCn0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxMzoit6i5+kNBQzQw1rjK/SI7fQ==
    YToyOntzOjI6ImsxIjtzOjQ4OiIoR6BZUlM+RuyKPkbDZT9GAJI9RsMfPkYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxMzoitcK5+kRBWDMw1rjK/SI7fQ==
    YToyOntzOjI6ImsxIjtzOjQ4OiJkR6BZvcOpRrjfqUaPuKpG0napRgDlqUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToi0uK088D7uLvKsU1JQta4Ijt9
    YToyOntzOjI6ImsxIjtzOjQ4OiJ0RqBZKbwLRuGcC0bsBwxGhSMLRrgoC0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxMToiyPDKv1NNSda4yv0iO30=
    YToyOntzOjI6ImsxIjtzOjQ4OiIoR6BZPWKiRRRgokXNmqJFXG+hRVxvoUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToixs/M0dHAUFNJMjDWuMr9Ijt9
      

  7.   

    $s =<<< TXT
    YToyOntzOjI6ImsxIjtzOjQ4OiKYBKBZAKwsRoUMLUZ70DBGe9csRnFhMEYAADBBAAAAAAAAAAAAAAAAAAAAAAAYDEYiO3M6NDoibmFtZSI7czoxMjoiuuPJ+rn6xvPWuMr9Ijt9
    TXT;
    $s = base64_decode($s);
    //echo $s;
    $d = unserialize($s);
    print_r($d);
    $d['k1'] = unpack('it/fl/fo/fh/flo/fcl/fv/fam/fop/fb/fs/ftotlVo', $d['k1']);
    //$d['name'] = iconv('gb2312', 'utf-8', $d['name']);
    print_r($d);Array
    (
        [k1] => �燳�,F� -F{�0F{�,Fqa0F0A F
        [name] => 恒生国企指数
    )
    Array
    (
        [k1] => Array
            (
                [t] => 1503659160
                [l] => 11051
                [o] => 11075.129882812
                [h] => 11316.120117188
                [lo] => 11061.870117188
                [cl] => 11288.360351562
                [v] => 11
                [am] => 0
                [op] => 0
                [b] => 0
                [s] => 0
                [totlVo] => 8966
            )    [name] => 恒生国企指数
    )
      

  8.   

    不要用iconv,使用mb_convert_encoding
    改成这样就可以了$data = array('YToyOntzOjI6ImsxIjtzOjQ4OiKYBKBZAKwsRoUMLUZ70DBGe9csRnFhMEYAADBBAAAAAAAAAAAAAAAAAAAAAAAYDEYiO3M6NDoibmFtZSI7czoxMjoiuuPJ+rn6xvPWuMr9Ijt9',
    'YToyOntzOjI6ImsxIjtzOjQ4OiK4859ZuP7ERHENxUSFM8VEKWTERDP7xEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxMToizKm5+lNFVNa4yv0iO30=',
    'YToyOntzOjI6ImsxIjtzOjQ4OiJcBKBZH9j2RuFy90ZhfPdGGnT2Rh/Y9kYAAAAAAAAAAAAAAAAAAAAAAAAAAAAcEEYiO3M6NDoibmFtZSI7czoxNjoi06G2yMPPwvJTRU5TRVgzMCI7fQ==',
    'YToyOntzOjI6ImsxIjtzOjQ4OiK4xaBZuD6DRJpZg0TXo4RESFmDRK6PhEQAAAAAAAAAAAAAAAAAAAAAAAAAAADI6kYiO3M6NDoibmFtZSI7czoxMzoitu3C3su5UlRT1rjK/SI7fQ==',
    'YToyOntzOjI6ImsxIjtzOjQ4OiLARaBZ1wu4RFIQuETs4bhEj8q3RMP1t0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToiuLvKscW31t7PyMf9MzAwIjt9',
    'YToyOntzOjI6ImsxIjtzOjQ4OiLARaBZrlGVRa5RlUX2EJZFhdOURYU1lUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToiuLvKscW31t7PyMf9ODDWIjt9',
    'YToyOntzOjI6ImsxIjtzOjQ4OiLARaBZj0SBRRRMgUUU8IFFuBSBRQBAgUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNjoiuLvKscW31t7PyMf9MTAw1iI7fQ==',
    'YToyOntzOjI6ImsxIjtzOjQ4OiIoR6BZe3jnRXt450U9fOhFrkvnRa5L50UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToi06K5+ri7yrExMDDWuMr9Ijt9',
    'YToyOntzOjI6ImsxIjtzOjQ4OiL0PqBZUuh8RFLofETD9X1Erod8RK6HfEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNjoitaTC87jnsb65/rj5MjDWuCI7fQ==',
    'YToyOntzOjI6ImsxIjtzOjQ4OiL8RaBZ9sxyRfbMckVmbnRFCodyRcM1c0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNjoit9LAvLrVtvvQwbv5MjXWuCI7fQ==',
    'YToyOntzOjI6ImsxIjtzOjQ4OiLARaBZrj/ARK4/wETX88FECj/ARD2awEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToiyPC15Mu5tcK457b7xKYzIjt9',
    'YToyOntzOjI6ImsxIjtzOjQ4OiIoR6BZZsYBRBSuAURIAQJErlcBROFaAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNjoiusnAvLCixLfLuczYtaTWuCI7fQ==',
    'YToyOntzOjI6ImsxIjtzOjQ4OiL8RaBZrktXRVJ4V0XsWVhFUoxWRSkYV0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToixbfW3su5zdC/yzUw1rjKIjt9',
    'YToyOntzOjI6ImsxIjtzOjQ4OiL8RaBZSEG7Qwp3u0NSGLxDzQy7Q+wxu0MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNjoixbfW3su5zdC/yzYwMNa4yiI7fQ==',
    'YToyOntzOjI6ImsxIjtzOjQ4OiIoR6BZ1990RRQWdUVIfXVFXBt0RVwbdEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxMjoiscjA+8qxMjDWuMr9Ijt9',
    'YToyOntzOjI6ImsxIjtzOjQ4OiIoR6BZCsmfRdcLoEVmqKBFFFSfRaSCn0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxMzoit6i5+kNBQzQw1rjK/SI7fQ==',
    'YToyOntzOjI6ImsxIjtzOjQ4OiIoR6BZUlM+RuyKPkbDZT9GAJI9RsMfPkYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxMzoitcK5+kRBWDMw1rjK/SI7fQ==',
    'YToyOntzOjI6ImsxIjtzOjQ4OiJkR6BZvcOpRrjfqUaPuKpG0napRgDlqUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToi0uK088D7uLvKsU1JQta4Ijt9',
    'YToyOntzOjI6ImsxIjtzOjQ4OiJ0RqBZKbwLRuGcC0bsBwxGhSMLRrgoC0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxMToiyPDKv1NNSda4yv0iO30=',
    'YToyOntzOjI6ImsxIjtzOjQ4OiIoR6BZPWKiRRRgokXNmqJFXG+hRVxvoUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiO3M6NDoibmFtZSI7czoxNToixs/M0dHAUFNJMjDWuMr9Ijt9');$result = array();foreach($data as $k=>$v){
        $result[] = handle($v);
    }print_r($result);function handle($s){
        $data = unserialize(base64_decode($s));
        $format = 'itime/flast/fop/fhi';
        $format = 'it/fl/fo/fh/flo/fcl/fv/fam/fop/fb/fs/ftotlVo';
        $data['k1'] = unpack($format, $data['k1']); 
        $data['name'] = mb_convert_encoding($data['name'], 'UTF8', 'GBK');
        return $data;
    }输出:
    Array
    (
        [0] => Array
            (
                [k1] => Array
                    (
                        [t] => 1503659160
                        [l] => 11051
                        [o] => 11075.129882812
                        [h] => 11316.120117188
                        [lo] => 11061.870117188
                        [cl] => 11288.360351562
                        [v] => 11
                        [am] => 0
                        [op] => 0
                        [b] => 0
                        [s] => 0
                        [totlVo] => 8966
                    )            [name] => 恒生国企指数
            )    [1] => Array
            (
                [k1] => Array
                    (
                        [t] => 1503654840
                        [l] => 1575.9599609375
                        [o] => 1576.4200439453
                        [h] => 1577.6099853516
                        [lo] => 1571.1300048828
                        [cl] => 1575.8499755859
                        [v] => 0
                        [am] => 0
                        [op] => 0
                        [b] => 0
                        [s] => 0
                        [totlVo] => 0
                    )            [name] => 泰国SET指数
            )    [2] => Array
            (
                [k1] => Array
                    (
                        [t] => 1503659100
                        [l] => 31596.060546875
                        [o] => 31673.439453125
                        [h] => 31678.189453125
                        [lo] => 31546.05078125
                        [cl] => 31596.060546875
                        [v] => 0
                        [am] => 0
                        [op] => 0
                        [b] => 0
                        [s] => 0
                        [totlVo] => 9223
                    )            [name] => 印度孟买SENSEX30
            )    [3] => Array
            (
                [k1] => Array
                    (
                        [t] => 1503708600
                        [l] => 1049.9599609375
                        [o] => 1050.8000488281
                        [h] => 1061.1199951172
                        [lo] => 1050.7900390625
                        [cl] => 1060.4899902344
                        [v] => 0
                        [am] => 0
                        [op] => 0
                        [b] => 0
                        [s] => 0
                        [totlVo] => 30052
                    )            [name] => 俄罗斯RTS指数
            )    [4] => Array
            (
                [k1] => Array
                    (
                        [t] => 1503675840
                        [l] => 1472.3699951172
                        [o] => 1472.5100097656
                        [h] => 1479.0600585938
                        [lo] => 1470.3299560547
                        [cl] => 1471.6800537109
                        [v] => 0
                        [am] => 0
                        [op] => 0
                        [b] => 0
                        [s] => 0
                        [totlVo] => 0
                    )            [name] => 富时欧洲先驱300
            )    [5] => Array
            (
                [k1] => Array
                    (
                        [t] => 1503675840
                        [l] => 4778.2099609375
                        [o] => 4778.2099609375
                        [h] => 4802.1201171875
                        [lo] => 4762.4399414062
                        [cl] => 4774.6899414062
                        [v] => 0
                        [am] => 0
                        [op] => 0
                        [b] => 0
                        [s] => 0
                        [totlVo] => 0
                    )            [name] => 富时欧洲先驱80
            )    [6] => Array
            (
                [k1] => Array
                    (
                        [t] => 1503675840
                        [l] => 4136.5698242188
                        [o] => 4137.509765625
                        [h] => 4158.009765625
                        [lo] => 4130.58984375
                        [cl] => 4136
                        [v] => 0
                        [am] => 0
                        [op] => 0
                        [b] => 0
                        [s] => 0
                        [totlVo] => 0
                    )            [name] => 富时欧洲先驱100
            )    [7] => Array
            (
                [k1] => Array
                    (
                        [t] => 1503676200
                        [l] => 7407.0600585938
                        [o] => 7407.0600585938
                        [h] => 7439.5297851562
                        [lo] => 7401.4599609375
                        [cl] => 7401.4599609375
                        [v] => 0
                        [am] => 0
                        [op] => 0
                        [b] => 0
                        [s] => 0
                        [totlVo] => 0
                    )            [name] => 英国富时100指数
            )    [8] => Array
            (
                [k1] => Array
                    (
                        [t] => 1503674100
                        [l] => 1011.6300048828
                        [o] => 1011.6300048828
                        [h] => 1015.8400268555
                        [lo] => 1010.1199951172
                        [cl] => 1010.1199951172
                        [v] => 0
                        [am] => 0
                        [op] => 0
                        [b] => 0
                        [s] => 0
                        [totlVo] => 0
                    )            [name] => 丹麦哥本哈根20指
            )    [9] => Array
            (
                [k1] => Array
                    (
                        [t] => 1503675900
                        [l] => 3884.8100585938
                        [o] => 3884.8100585938
                        [h] => 3910.8999023438
                        [lo] => 3880.4399414062
                        [cl] => 3891.3601074219
                        [v] => 0
                        [am] => 0
                        [op] => 0
                        [b] => 0
                        [s] => 0
                        [totlVo] => 0
                    )            [name] => 芬兰赫尔辛基25指
            )    [10] => Array
            (
                [k1] => Array
                    (
                        [t] => 1503675840
                        [l] => 1537.9899902344
                        [o] => 1537.9899902344
                        [h] => 1551.6199951172
                        [lo] => 1537.9699707031
                        [cl] => 1540.8199462891
                        [v] => 0
                        [am] => 0
                        [op] => 0
                        [b] => 0
                        [s] => 0
                        [totlVo] => 0
                    )            [name] => 瑞典斯德哥尔摩3
            ))
      

  9.   

    谢谢。但没解决问题,问题依然存在:
         iconv('GB2312','UTF-8//IGNORE',$data['name']);  这句改变了$data的值
    源代码:
                var_dump($data);
                echo iconv('GB2312','UTF-8//IGNORE',$data['name']).'<br />';
                var_dump($data);结果:
        array(2) { ["k1"]=> string(48) " ��Y{��B=��BH�B ׸B= �B" ["name"]=> string(8) "��Ԫָ��" }
        美元指数
        array(2) { ["k1"]=> string(12) "美元指数" ["name"]=> string(8) "��Ԫָ��" } 
      

  10.   

    你的程序可以正常执行。我改了下不行,请再帮忙看下
                $doc=array();
                $data=$redis->hGetAll("$label");
                $doc=(array)$data;
                $format = 'itime/flastClose/fopen/fhigh/flow/fclose/fvol/famount/fopid/fbv/fsv/ftotalVol';
                $doc['label']=$label;
                $doc['name'] = mb_convert_encoding($doc['name'], 'UTF8', 'GBK');
                $doc['k1'] = unpack($format, $doc['k1']);    
                print_r ($doc);结果:
           Array ( [open] => 只有这个,这是哪方面的问题?
      

  11.   

    上述代码在如下循环中:
            foreach ($listData as $label)
            {
                $doc=array();
                $data=$redis->hGetAll("$label");
                $doc=(array)$data;
                $format = 'itime/flastClose/fopen/fhigh/flow/fclose/fvol/famount/fopid/fbv/fsv/ftotalVol';
                $doc['label']=$label;
                $doc['name'] = mb_convert_encoding($doc['name'], 'UTF8', 'GBK');
                $doc['k1'] = unpack($format, $doc['k1']);    
                print_r ($doc);
            }