今天遇到了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来避免这个问题

PHP json编码遇到的问题的更多相关文章

  1. php json_encode转JSON 编码显示中文

    对变量进行 JSON 编码显示中文 /**context":"/u2345/u43245/u2345 转成中文显示 * 对变量进行 JSON 编码[{"time" ...

  2. 在JavaScript中使用json.js:使得js数组转为JSON编码

    在json的官网中下载json.js,然后在script中引入,以使用json.js提供的两个关键方法. 1.数组对象.toJSONString() 这个方法将返回一个JSON编码格式的字符串,用来表 ...

  3. php查询mysql中的json编码后的字符串内容的方法

    问题 mysql里存的是json编码后的字符串,其中中文会被转为unicode码,所以直接查询是查询不到的. mysql里的查询如 like "%\u6211\u662f%" 也是 ...

  4. golang json 编码解码

    json 编码 package main import ( "encoding/json" "fmt" ) type Person struct { Name ...

  5. 在JavaScript中使用json.js:访问JSON编码的某个值

    演示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...

  6. Python之json编码

    一.json JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法 1.json轻量级:语法规则 JSON 语法是 ...

  7. 51. ExtJs4之Ext.util.JSON编码和解码JSON对象

    转自:https://blog.csdn.net/iteye_9439/article/details/82518158 1.decode() 该方法用于将符合JSON格式的String进行解码成为一 ...

  8. Go语言json编码驼峰转下划线、下划线转驼峰

    目录 一.需求 二.实现 三.使用 JsonSnakeCase统一转下划线json JsonSnakeCase统一转驼峰json 一.需求 golang默认的结构体json转码出来,都是大写驼峰的,并 ...

  9. perl处理含有中文字符的json编码

    例子:1. 有php的 json函数生成的中文串 [root@tts177:/tmp]$/opt/php/bin/php -r 'echo json_encode(Array("a" ...

随机推荐

  1. python string.py 源码分析 三:maketrans

    l = map(chr, xrange(256)) #将ascii转为字符串 _idmap = str('').join(l) del l # Construct a translation stri ...

  2. RDLC报表 在WinForm里运行出现 未能加载文件或程序集microsoft.reportviewer.winforms

    做一下记录顺便帮助一下遇到问题的朋友. 做RDLC报表在WinForm运行,在VS里面调试引用了“Microsoft.ReportViewer.Common.dll”和“Microsoft.Repor ...

  3. Android开发在路上:少去踩坑,多走捷径

    转自:http://djt.qq.com/article/view/1193   最近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享. 1.目前, ...

  4. [转]Python零碎知识(2):强大的zip

    一.代码引导 首先看这一段代码: 1 >>> name=('jack','beginman','sony','pcky') 2 >>> age=(2001,2003 ...

  5. javascript 无语的==

    今天面试不小心掉进坑了,大公司特别喜欢考javascript,而且专门挑很tricky的case. javascipt的==简直就是黑魔法,以前偷懒总是用,感觉也没有问题,可是准备面试就需要有寻根问底 ...

  6. jquery自定义类似$.ajax()的方法

    热腾腾的代码: <script type="text/javascript"> $.extend({ testgogo: function (options) { va ...

  7. 读书笔记_Effective_C++_条款四十七:请使用trait classes来表示类型信息

    这一条款主要来讨论模板中迭代器的属性iterator_category,它可以通过类似于vector<int>::iterator::iterator_category的方式来取得. 到这 ...

  8. Django:Model的Filter

    转自:http://www.douban.com/note/301166150/   django model filter 条件过滤,及多表连接查询.反向查询,某字段的distinct   1.多表 ...

  9. java攻城狮之路(Android篇)--SQLite

    一.Junit    1.怎么使用        在AndroidManifest.xml文件中进行配置, 在manifest借点下配置instrumentation, 在application借点下 ...

  10. 【Java】一次SpringMVC+ Mybatis 配置多数据源经历

    需求 现在在维护的是学校的一款信息服务APP的后台,最近要开发一些新功能,其中一个就是加入学校电影院的在线购票.在线购票实际上已经有一套系统了,但是是外包给别人开发的,我们拿不到代码只能拿到数据库,并 ...