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)) ;
数据来自redis,通过python的dict存入的。用json_decode()解析为空。
```python
>>> 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'}
```
```php
$msg = "{'a': '\xba\xba\xd7\xd3'}" ;
$msg = json_decode($msg,true) ;
#解析数据为空,那些\x的字符是gbk的
```
解决思路:
1.python那边将数据转成unicode。
2.php这边将gbk编码转成utf-8
```php
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
发表评论 登录:
昵称