PHP 解析非标准json

2017-1-22 Frank PHP

数据来自redis,通过python的dict存入的。用json_decode()解析为空。

>>> a = "汉字"
>>> b = a.decode("gbk")
>>> c = {"a":b}
>>> print {"a":a}
{'a': '\xba\xba\xd7\xd3'}
>>> print {"a":a.decode("gbk")}
{'a': u'\u6c49\u5b50'}
$msg = "{'a': '\xba\xba\xd7\xd3'}" ;
$msg = json_decode($msg,true) ;
#解析数据为空,那些\x的字符是gbk的

解决思路:
1.python那边将数据转成unicode。
2.php这边将gbk编码转成utf-8

<?php
/*
    字符串GBK转码为UTF-8,数字转换为数字。
*/
function ct2($s){
    if(is_numeric($s)) {
        return intval($s);
    } else {
        return iconv("GBK","UTF-8",$s);
    }
}
/*
    批量处理gbk->utf-8
*/
function icon_to_utf8($s) {
  if(is_array($s)) {
    foreach($s as $key => $val) {
      $s[$key] = icon_to_utf8($val);
    }
  } else {
      $s = ct2($s);
  }
  return $s;
}
$msg = "{'a': '\xba\xba\xd7\xd3'}" ;
echo $msg ."\n";
$msg = ct2($msg) ;
$msg = str_replace("'", '"', $msg) ;
echo $msg ."\n";
var_dump(json_decode($msg,true)) ;

参考:
http://www.111cn.net/phper/php-cy/55575.htm

发表评论 登录

Top