首页 > php开发 > php中json_encode中文字符乱码解决办法

php中json_encode中文字符乱码解决办法

大致的解决办法是保证在使用JSON处理的时候字符是以UTF8编码的。具体我们可以把数据库编码和页面编码都改为UTF8。当然喜欢用gbk编码的话,可以在进行JSON处理前,把字符转为UTF8形式

一、json_encode()

这个是一个对变量进行 JSON 编码常用的函数,但是当文本的格式不是utf-8时,中文的转码会出现一些问题,比如文本为gb2312的时候,示例:

<?php
$jsonText = array(
    0 => array(
        'id' => '1',
        'name' => '文本1'
    ) ,
    1 => array(
        'id' => '2',
        'name' => '文本2'
    )
);
echo json_encode($jsonText);
//[{"id":"1","name":""},{"id":"2","name":""}]
//可以看到汉字没有被转义都为空"",这是因为json仅仅转义encoding编码(类似于:%B0%AE),故上面语句应该先转换编码
?>

解决办法:

<?php
foreach ($jsonText as $key => $value) {
    $jsonText[$key]['name'] = urlencode($value['name']);
}
echo json_encode($jsonText);
?>

客户端处理:

<script type="text/javascript">  
function encodeTest(obj)  
{  
 $.ajax( {  
  type : "GET",  
  url : "< ?=$this->baseUrl?>/index/getajax",  
  data : "c=" obj.value,  
  success : function(json)  
   {  
   var json=eval(json);  
   var testValue = '';  
   $.each(json, function(k) {  
   testValue += decodeURI(json[k]['name']) ;  
   });  
 
   alert(testValue); 
   }  
 } )  
 
} 
</script>

用上面的代码js会报错 说编码不符合标准,原因是因为js 中decodeURI 仅仅支持utf8 转码,所以,PHP json_encode函数的代码应该为下面的代码:

<?php
foreach ($jsonText as $key => $value) {
    $jsonText[$key]['name'] = urlencode(iconv('gb2312', 'utf-8', $value['name']));
}
echo json_encode($json);
?>

查看输出结果为:{"name":"u4e2du6587u5b57u7b26u4e32","value":"test"},可见即使用UTF8编码的字符,使用json_encode也出现了中文乱码。解决办法是在使用json_encode之前把字符用函数urlencode()处理一下,然后再json_encode,输出结果的时候在用函数urldecode()转回来。具体如下:

<?php
$testJSON = array(
    'name' => '中文字符串',
    'value' => 'test'
);
//echo json_encode($testJSON);
foreach ($testJSON as $key => $value) {
    $testJSON[$key] = urlencode($value);
}
echo urldecode(json_encode($testJSON));
?>

查看输出结果为:{"name":"中文字符串","value":"test"},到此,成功地输出了中文字符,随意使用json_encode吧,这样子在PHP后台输出的JSON字符串在前台javascript中Ajax接收后eval出来也不会出现中文乱码,因为js在处理JSON格式数据是也是以UTF8的形式进行的,与PHP类似,故接收PHP页面的JSON字符串不会出现问题。


教程地址:http://www.phprm.com/develop/fs711.html

欢迎转载!但请带上文章地址^^

标签:中文 jsonencode 字符乱码

相关文章

发表留言