php程序员的笔记

  • 网站首页
  • PHP笔记
    • 字符串处理
    • php函数总结
    • 正则表达式
    • 模板框架使用
    • 我的网站模板笔记
    • Ecshop二次开发笔记
    • php源码下载
  • 数据库教程
    • MySQL数据库
    • MongoDB
    • Access数据库
    • Redis
  • JavaScript教程
    • Jquery基础
    • Jquery特效
    • JS常用函数
    • 开源插件开发
    • 谷歌地图开发
  • HTML教程
    • DIV+CSS技术篇
    • 网站优化笔记
    • HTML5 技术
  • 操作系统技巧
    • windows 7系统篇
    • Linux操作系统篇
    • 服务器
  • 互联网资讯
    • 生活杂侃
php程序员的笔记 -> PHP笔记 -> php函数总结 -> php返回json数据中文显示不友好的问题的解决办法

php返回json数据中文显示不友好的问题的解决办法

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

查询了一下,有四种解决方法:

1. 将"\u53a6\u95e8"还原成“厦门”,使用如下的代码:

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

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

$code = urldecode(json_encode(urlencode("厦门")));

3. 自PHP5.4版本起,已经给Json_encode函数新增了一个参数选项: JSON_UNESCAPED_UNICODE。加上这个参数后,就不会自动把中文编码了。

echo json_encode("厦门", JSON_UNESCAPED_UNICODE);

4. 作者自己根据以上的解决方法,重写了一下 json_encode 和 json_decode 这两个方法,如下:

/**
 * json 生成,分析 支持中文
 */
class Json_Helper {
    /**
     * 生成json
     */
    public static function encode($str){
        $json = json_encode($str);
        //linux
        return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", $json);
        //windows
        //return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2LE', 'UTF-8', pack('H4', '\\1'))", $json);
    }
    /**
     * 分析json
     */
    public static function decode($str) {
        return json_decode($str);
    }
}

另外需要特别注意的是:由于 json_encode 和 json_decode只支持utf-8编码的字符,GBK的字符要用json就得转换一下,下面也同时给出GBK转UTF-8的相关代码:

/*
    字符串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;

}

使用示例:

echo json_encode(icon_to_utf8("厦门"));

您可能感兴趣的文章

  • php获取时间间隔的方法总结,php显示论坛发帖时间间隔方法大全
  • 在php中分别使用curl的post提交数据的方法和get获取网页数据的方法总结
  • JavaScript 如何处理 php 返回json格式的数据
  • php如何将html中的br换行符转换为文本输入中的换行符
  • php清空(删除)指定目录下的文件,不删除目录文件夹的方法
  • 如何解决php中并发读写文件冲突的问题
  • php在数组中查找某个值是否存在(in_array(),array_search(),array_key_exists())
  • PHP连接access数据库的二种方法
转载请注明出处:php程序员的笔记
本文永久地址:http://www.phpernote.com/php-function/1253.html
发布时间:2016 年 06 月 28 日 09 时 52 分 05 秒     文章来源:-わ千与千寻
上一篇:PHP5.5+启用OPCache提高php程序性能的方法
下一篇:使用phpmyadmin无法创建innodb类型表的解决办法
热门文章
  • PHP获取当前时间、时间戳方法大总结
  • php获取远程图片并下载保存到本地
  • php优化压缩的图片
  • php提取字符串中的数字
  • php购物车类
  • PHP判断浏览器类型
随机文章
  • thinkphp更新数据库的五种方法
  • php const和define的区别(php类中如何定义常量)
  • It is not safe to rely on the system's timezone settings....的解决办法
  • php判断json格式是否正确和是否为json格式的方法
  • 开启PHP的error_log排查线上(生产环境)遇到的错误
  • php如何知道一个类共有多少方法(包括继承的)
  • 周热门文章
    • php判断变量类型常用方法
    • php二维数组去掉重复值的方法总结
    • php获取客户端真实ip地址的三种方法
    • PHP获取当前服务器详细信息
    • php在数组中查找某个值是否存在(in_array(),array_search(),array_key_exists())
    • php模拟发送get请求
    • php提示Maximum execution time of 30 seconds exceeded...错误的解决办法
    • php解析url (parse_url) 参数成数组 (parse_str)
    • php获取本周和上周的开始日期和结束日期
    • PHP的Try, throw 和 catch简单用法

All rights reserved. Design by -わ千与千寻.  京ICP备16025782号-1网站地图  友情连接有话要说私人建站招募投稿  广告服务  互联网工具大全