• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

PHPjson编码遇到的问题

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

今天遇到了json编码解码之后中文消失的问题,一探究竟,写下这篇文章

PHP中提供了json_encode  和json_decode 这对函数 将PHP中 值转化成 字符串,但是遇到中文的时候,很容易出现乱码。为什么呢?

查看PHP手册,发现json只支持utf-8编码,也就是说,中文在进行json_encode时,必须是utf-8编码,json_decode之后也是utf-8编码

 

测试程序如下:

<?php
$arr = array
       (
          'Name'=>'德玛西亚',
          'Age'=>20
       );

$str = json_encode($arr);
$str = json_decode($str,TRUE);
var_dump($str);
?>

  输出结果如下

array
  'Name' => null
  'Age' => int 20

  可以看到,中文在这个转化过程中丢失了。

解决这个问题目前我知道两种方法。

方法1:转码,json_encode之前确保编码是utf-8,而且别忘记 json_decode之后 转回原来的编码

如下所示:

<?php
$arr = array
       (
          'Name'=>iconv('GBK', 'utf-8','德玛西亚'),
          'Age'=>20
       );

$str = json_encode($arr);
$str = json_decode($str,TRUE);
$str['Name'] = iconv('UTF-8','GBK',$str['Name']);//别忘了转回来

var_dump($str);
?>

  运行如下:

array
  'Name' => string '德玛西亚' (length=8)
  'Age' => int 20

  方法二:

urlencode 和urldecode 来帮忙。其实原理也一样,urlencode会将 串的编码转成utf-8的。

<?php
$arr = array
       (
          'Name'=>urlencode('德玛西亚'),
          'Age'=>20
       );
     
$str = json_encode($arr);
$str = json_decode($str,TRUE);

$str['Name'] = urldecode($str['Name']);

var_dump($str);
?>

  运行结果

array
  'Name' => string '德玛西亚' (length=8)
  'Age' => int 20

  

 

出了上面两种方法,查看手册可知,在php5.4以后,json_encode可以带一个参数JSON_UNESCAPED_UNICODE来避免这个问题

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
PHP从数组中删除元素的四种方法实例发布时间:2022-07-10
下一篇:
怎么去掉织梦网站首页带的index.html/index.php发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap