全球主机交流论坛

标题: 技术牛进,PHP取UNICODE编码的JSON中的中文 [打印本页]

作者: Mr.Ra1n    时间: 2012-12-14 14:49
标题: 技术牛进,PHP取UNICODE编码的JSON中的中文
http://wenwen.soso.com/z/q421101414.htm
两个分都给你吧。
提供两个思路:
1、直接取JSON中的那一段,数组要转成普通变量,直接可以echo $变量 得出“广东深圳”的结果(转成UTF-8编码)。
2、转成UTF-8正则匹配取汉字或者匹配UNICODE取汉字再转成UTF-8。

AVELINE妹纸给我写的我这整不出来。
作者: 李院长    时间: 2012-12-14 14:49
本帖最后由 李院长 于 2012-12-14 17:43 编辑

废话不说,直接上代码,需要php装有iconv
  1. <?php
  2. $text = file_get_contents('http://www.youdao.com/smartresult-xml/search.s?jsFlag=true&type=mobile&q=13760191994');
  3. $text = iconv('gbk', 'utf-8', $text);
  4. preg_match("/\{.*\'location\'\:\'(.*)\'\.*}/", $text, $matches);
  5. // 值在 $matches[1]
  6. echo $matches[1];
  7. ?>
复制代码
以上代码已经过测试


作者: html5    时间: 2012-12-14 14:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: 完美    时间: 2012-12-14 14:52
先转码 iconv
再json_decode
作者: Mr.Ra1n    时间: 2012-12-14 14:53
html5 发表于 2012-12-14 14:51
$data_array=json_decode($json_data,1);
返回的$data_array,就是你想要有数据组成的数组了。 ...

不行,空的。
作者: html5    时间: 2012-12-14 14:55
提示: 作者被禁止或删除 内容自动屏蔽
作者: Comcast    时间: 2012-12-14 15:00
本帖最后由 Comcast 于 2012-12-14 15:08 编辑
html5 发表于 2012-12-14 14:55
看JSON是怎么转换的了。PHP的JSON转换出去后,中文是转换成了\u5555这种格式了的 ...


表示无压力,怎么感觉你们是反向。还原json为数组。我遇到中文变成null或者\u3932 这种 是 数组转json才会遇到,因为转换时json自己对字符串进行unicode 编码。

怎么看怎么觉的你这个奇怪,按理直接转换 echo 就行了。

  1. function unicode2utf8($str){
  2.         if(!$str) return $str;
  3.         $decode = json_decode($str);
  4.         if($decode) return $decode;
  5.         $str = '["' . $str . '"]';
  6.         $decode = json_decode($str);
  7.         if(count($decode) == 1){
  8.                 return $decode[0];
  9.         }
  10.         return $str;
  11. }

  12. $json = unicode2utf8($json);
  13. $json = json_decode($json,true);
  14. echo $json['location'];
复制代码

作者: 过客    时间: 2012-12-14 15:00
看到写程序,我就弱弱滴打了个酱油。
作者: Mr.Ra1n    时间: 2012-12-14 15:06
Comcast 发表于 2012-12-14 15:00
表示无压力,怎么感觉你们是反向。还原json为数组。我遇到中文变成null或者\u3932 这种 是 数组转json才 ...

来吧 直接来个代码
作者: gogogo    时间: 2012-12-14 15:13
6楼代码不行么?
作者: Mr.Ra1n    时间: 2012-12-14 15:37
本帖最后由 Mr.Ra1n 于 2012-12-14 15:40 编辑
Comcast 发表于 2012-12-14 15:00
表示无压力,怎么感觉你们是反向。还原json为数组。我遇到中文变成null或者\u3932 这种 是 数组转json才 ...
  1.                         <?php               
  2.                                 function unicode2utf8($str){
  3.                                                 if(!$str) return $str;
  4.                                                 $decode = json_decode($str);
  5.                                                 if($decode) return $decode;
  6.                                                 $str = '["' . $str . '"]';
  7.                                                 $decode = json_decode($str);
  8.                                                 if(count($decode) == 1){
  9.                                                                 return $decode[0];
  10.                                                 }
  11.                                                 return $str;
  12.                                 }
  13.                                 $json = "http://www.youdao.com/smartresult-xml/search.s?jsFlag=true&type=mobile&q=13760191994";
  14.                                 $json = unicode2utf8($json);
  15.                                 $json = json_decode($json,true);
  16.                                 echo $json['location'];
  17.                          ?>
复制代码
结果为空。
作者: wdlth    时间: 2012-12-14 15:38
\uxxxx不是UTF-8,是Unicode……
作者: Zeraba    时间: 2012-12-14 17:15
本帖最后由 Zeraba 于 2012-12-14 17:18 编辑

updateCall(1, {'product':'mobile','phonenum':'13760191994','location':'广东 深圳'} , '');
这个格式不符合json规范的样子 也许应该替换下 让格式符合json
做json_decode处理的时候 数据就丢了
  1. <?php
  2. $a = '
  3. {
  4.     "product": "mobile",
  5.     "phonenum": "13760191994",
  6.     "location": "广东深圳"
  7. }
  8. ';

  9. $b = json_decode(stripslashes($a),true);

  10. echo $b[location];
  11. ?>
复制代码
大概是这样的
作者: Comcast    时间: 2012-12-14 17:18
Zeraba 发表于 2012-12-14 17:15
updateCall(1, {'product':'mobile','phonenum':'13760191994','location':'广东 深圳'} , '');
这个格式不 ...

楼主问题复杂化了又是UTF8又是unicode 的

直接写个正则匹配取出 {'product':'mobile','phonenum':'13760191994','location':'广东 深圳'} 这部分json

然后decode出来  数组直接echo就行了。 还什么UTF-8  unicode的。刚试了一下就这么简单。
作者: Zeraba    时间: 2012-12-14 17:19
Comcast 发表于 2012-12-14 17:18
楼主问题复杂化了又是UTF8又是unicode 的

直接写个正则匹配取出 {'product':'mobile','phonenum':'1376 ...

嗯 正则拔出来也很方便 有关键字
作者: 啪啪啪啪啪    时间: 2012-12-14 17:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: eslizn    时间: 2012-12-14 18:08
  1. $obj=new stdClass;
  2. $obj->product='mobile';
  3. $obj->phonenum='13700000000';
  4. $obj->location='广东 深圳';

  5. $jsonStr=json_encode($obj);
  6. echo $jsonStr;

  7. $_obj=json_decode(mb_convert_encoding($jsonStr,'UTF-8',mb_detect_encoding($jsonStr)));
  8. echo '<pre>';
  9. print_r($_obj);
复制代码

作者: eslizn    时间: 2012-12-14 18:09
eslizn 发表于 2012-12-14 18:08

需要Multibyte String支持,不过现在基本上空间商都支持
作者: 李院长    时间: 2012-12-14 18:53
楼主出来给分




欢迎光临 全球主机交流论坛 (https://lilynana.eu.org/) Powered by Discuz! X3.4