PHP JSON_DECODE/JSON_ENCODE中文内容为NULL或乱码

可能用很多朋友使用json数据时利用php自带的函数JSON_DECODE/JSON_ENCODE处理中文内容时会碰到出现NULL或乱码问题,下面我来给大家介绍为什么会出现这样的问题。

代码如下 复制代码

<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

?>

输出结果

object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}

array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}

完全正确没有任何问题,那么我们测试中文

代码如下 复制代码

<?php
$json = '{"a":"中国人人"}';

var_dump(json_decode($json));

?>

结果

{"text":null,"status":1}

后来从php手册中得出,json_encode 和 json_decode只支持utf-8编码的字符,GBK的字符要用json就得转换一下,这样我们就好办了

转换一个编码

代码如下 复制代码

/*
字符串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("厦门"));

这样还是有时会有问题,后来找了一种在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。

写了个函数

代码如下 复制代码

/**************************************************************
*
* 使用特定function对数组中所有元素做处理
* @param string &$array 要处理的字符串
* @param string $function 要执行的函数
* @return boolean $apply_to_keys_also 是否也应用到key上
* @access public
*
*************************************************************/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
foreach ($array as $key => $value) {
if (is_array($value)) {
arrayRecursive($array[$key], $function, $apply_to_keys_also);
} else {
$array[$key] = $function($value);
}

if ($apply_to_keys_also && is_string($key)) {
$new_key = $function($key);
if ($new_key != $key) {
$array[$new_key] = $array[$key];
unset($array[$key]);
}
}
}
}

/**************************************************************
*
* 将数组转换为JSON字符串(兼容中文)
* @param array $array 要转换的数组
* @return string 转换得到的json字符串
* @access public
*
*************************************************************/
function JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
}

分类:默认分类 时间:2012-01-02 人气:25
本文关键词:
分享到:

相关文章

  • php中json_decode()和json_encode()用法与中文不显示解决办法 2012-10-22

    本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行编码 说明 mixed json_decode ( string $json [, bool $ass

  • php的json_decode函数返回null的问题 2015-03-14

    php5.2以后自带json_decode函数,但是对json文本串的格式要求非常严格,如果我们稍有一点不注意很可能使用该函数得到的返回值是NULL了,今天我就碰到此问题下面一起来看看. 可以使用使用json_last_error()函数获取到的返回值来帮助我们判断出问题的原因. 其中如果提示错误JSON_ERROR_SYNTAX(Syntax error),表示json串格式错误. 可以通过以下几个方式排错: 1. json字符串必须以双引号包含 代码如下 复制代码 $output = str

  • php中json_decode和var_export的参数用法 2014-03-26

    本文章主要讲述了关于php中json_decode和var_export的第二个参数的用法,有需要了解php中json_decode和var_export用法的朋友也可以参考一下下。 无论是json_decode还是var_export都是有第二个参数的,以前从来没有注意过,T_T.而且,这个var_export函数也是第一次知道,基础啊,还是不扎实。 json_decode (PHP 5 >= 5.2.0, PECL json:1.2.0-1.2.1) json_decode — 对 J

  • PHP数组传递给JavaScript以及json_encode的gbk中文乱码的解决 2012-10-19

    文章介绍了关于PHP数组传递给JavaScript以及json_encode的gbk中文乱码的解决 ,下面是创建JSON函数,这一段来自网上某一位大侠 代码如下 复制代码 /************************************************************** * * 使用特定function对数组中所有元素做处理 * @param string &$array 要处理的字符串 * @param string $function 要执行的函数 * @

  • PHP JSON返回null或空字符解决办法 2014-06-06

    json只能使用utf-8编码来进行操作,否则就会返回null或空字符串了,下面提供一个非常简单的办法供大家参考。 原因分析 其它的json_decode($str)返回NULL的一些原因: 1.$str只能UTF-8编码 2.元素最后不能有逗号(与php的array不同) 3.元素不能使用单引号 4.元素值中间不能有空格和\n,必须替换 在用PHP JSON处理符合标准的GBK编码内容时会返回null,将内容从GBK转换为UTF8再处理正常: 代码如下 复制代码 $jsonp = mb_con

  • PHP json_encode 中文处理类 2014-01-07

      中文处理在php中处理总是不那么完美经常会碰到中文处理时乱码或为空问题,下面我在处理json时也碰到同样的问题,后来整理一个完美解决 json_encode 中文乱码或为空程序类。 代码如下 /************************************************************** * * 使用特定function对数组中所有元素做处理 * @param string &$array 要处理的字符串 * @param string $functio

  • php中json_encode UTF-8中文乱码问题 2014-06-03

    json_encode乱码出现最多的是在中文,一个是中文显示成null了,另一个是json_encode把中的uft8字符变成了全字母了,下面来给各位分析一下解决办法吧。 最近在接口代码当中用到过json_encode,在网上找到说json_encode编码设置为UTF-8中文就不会乱码,经验证这办法确实是有效果的,但是不知道为什么,代码在用过一段时间之后就不太管用了。以下是自己的解决json_encode的办法。有更好的方法请分享出来吧! 第一种: 这种简单的做一个代码转换,urlcode之后

  • json_encode 中文显示问题解决方法 2012-04-07

    在php中json_encode 中文显示问题是困扰很多程序员的一个难题了,下面我来给大家介绍两种中文显示问题的解决方法,大家可参考。 json已经成为当前web开发最常用的数据格式,php也从5.2开始支持json和数组的转换函数 json_encode 和 json_decode 。但使用过程中我们会发现,(下面以“你”这个汉字为例)通过json_encode 函数转换后的中文全部变成了类似 u4f60 (你)这样的编码,虽然不影响程序执行,但是很不直观 首先,json_encode 对中文

  • php利用正则表达式读取不规范的xml文档 2012-08-28

    如果是标签的读取xml我们可以直接使用SimpleXMLElement或dom之类的进行读取xml文档了,但今天小编碰到的是不标准的xml文档了,下面一起来看使用正则的处理办法。 如果在你的程序中收到这样的字符串: 代码如下 复制代码 <ReportList><ordIndex>1</ordIndex><ordLabNo>1942268</ordLabNo><arcItemId>134</arcItemId>

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.053 (s). 10 q(s)