码迷,mamicode.com
首页 > Web开发 > 详细

[转]php返回json数据中文显示的问题

时间:2015-09-02 20:38:22      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

转自 : http://blog.csdn.net/superbirds/article/details/8091910

解决方法:

 
[php] view plaincopy
 
  1. <?php   
  2. function Notice(){  
  3.     include ‘./include/conn.php‘;  //数据库链接文件  
  4.     $sql_notice = mysql_query(‘SELECT * FROM gg_notice where enable = "1" limit 0,10‘);  
  5.     $notice = mysql_fetch_array($sql_notice, MYSQL_ASSOC);  
  6.     $str = json_encode($notice);  
  7.     //linux  
  8.     return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv(‘UCS-2BE‘, ‘UTF-8‘, pack(‘H4‘, ‘\\1‘))", $str);  
  9.     //windows  
  10.     //return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv(‘UCS-2LE‘, ‘UTF-8‘, pack(‘H4‘, ‘\\1‘))", $str);  
  11.       
  12. }  
  13. ?>  

 

 

另外从网上搜索到的其他方法

 
[php] view plaincopy
 
  1. <?php  
  2. /** 
  3.  * json 生成,分析 支持中文 
  4.  */  
  5. class Json_Helper {  
  6.     /** 
  7.      * 生成json 
  8.      */  
  9.     public static function encode($str){  
  10.         $json = json_encode($str);  
  11.         //linux  
  12.         return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv(‘UCS-2BE‘, ‘UTF-8‘, pack(‘H4‘, ‘\\1‘))", $json);  
  13.         //windows  
  14.         //return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv(‘UCS-2LE‘, ‘UTF-8‘, pack(‘H4‘, ‘\\1‘))", $json);  
  15.     }  
  16.   
  17.     /** 
  18.      * 分析json 
  19.      */  
  20.     public static function decode($str) {  
  21.         return json_decode($str);  
  22.     }  
  23. }  
  24. ?>  

 

这是从网上搜索得到的又一篇相关文章

当使用php自带的json_encode对数据进行编码时,中文都会变成unicode,导致不可读。如:对字符串”厦门“进行json_encode后,输出的是"\u53a6\u95e8"。

查询了一下,有两种方法:
1.将"\u53a6\u95e8"还原成“厦门”,使用如下的代码:

 

[php] view plaincopy
 
  1. $str= preg_replace("#\\\u([0-9a-f]+)#ie", "iconv(‘UCS-2‘, ‘UTF-8‘, pack(‘H4‘, ‘\\1‘))", $str);  

 

 

2.先将中文字段urlencode,json_encode后,再用urldecode,也可以显示中文。

 

[php] view plaincopy
 
  1. $code = urldecode(json_encode(urlencode("厦门")));  

 

PHP5.4版本,已经给Json新增了一个选项: JSON_UNESCAPED_UNICODE。加上这个选项后,就不会自动把中文编码了。
[php] view plaincopy
 
  1. echo json_encode("厦门", JSON_UNESCAPED_UNICODE);  

 

另,由于 json_encode 和 json_decode只支持utf-8编码的字符,GBK的字符要用json就得转换一下,附自己写的GBK转UTF-8的代码:

[php] view plaincopy
 
  1. /* 
  2.     字符串GBK转码为UTF-8,数字转换为数字。 
  3. */  
  4. function ct2($s){  
  5.     if(is_numeric($s)) {  
  6.         return intval($s);  
  7.     } else {  
  8.         return iconv("GBK","UTF-8",$s);  
  9.     }  
  10. }  
  11. /* 
  12.     批量处理gbk->utf-8 
  13. */  
  14. function icon_to_utf8($s) {  
  15.   
  16.   if(is_array($s)) {  
  17.     foreach($s as $key => $val) {  
  18.       $s[$key] = icon_to_utf8($val);  
  19.     }  
  20.   } else {  
  21.       $s = ct2($s);  
  22.   }  
  23.   return $s;  
  24.   
  25. }  
  26.   
  27. echo json_encode(icon_to_utf8("厦门"));  

[转]php返回json数据中文显示的问题

标签:

原文地址:http://www.cnblogs.com/Athrun/p/4779343.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!