php中json_encode处理gbk与gb2312中文乱码问题的解决方法


Posted in PHP onJuly 10, 2014

本文讲述了php中json_encode处理gbk与gb2312中文乱码问题的解决方法,具体方法如下:

1.json_encode()中文在gbk/gb2312中对中文返回为null

$arr = array ( 
 array ( 
   'catid' => '4', 
   'catname' => '3water.com', 
   'meta_title' => '三水点靠木' 
  )
);
 
echo json_encode($arr);

运行结果:

[{"catid":"4","catname":"3water.com","meta_title":null}]

看一了吗"meta_title":null 他本来是有一个值的为"三水点靠木"了,这个我们查了一下原理是json_encode只支持uft-8编码,我们转换一下
 

<?php
$data="JSON中文";
$newData=iconv("GB2312″,"UTF-8//IGNORE",$data);
echo $newData;
//ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符都不会被保存。
//或是("GB2312″,"UTF-8″,$data);
?>

2.后台PHP页面(页面编码为UTF-8或者已经把字符转为UTF-8)使用json_encode将PHP中的array数组转为JSON字符串。例如:

<?php
$testJSON=array('name'=>'中文字符串','value'=>'test');
echo json_encode($testJSON);
?>

查看输出结果为:

{"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函数只能处理uft8字符串,如果是中文估计是对字节处理不好,因为中文gbk与uft长度是不一样的,这个也不做深入介绍了。

PHP 相关文章推荐
PHP初学者头疼问题总结
Oct 09 PHP
模拟OICQ的实现思路和核心程序(二)
Oct 09 PHP
PHP不用第三变量交换2个变量的值的解决方法
Jun 02 PHP
php将session放入memcached的设置方法
Feb 14 PHP
PHP实现采集中国天气网未来7天天气
Oct 15 PHP
PHP时间和日期函数详解
May 08 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
May 21 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
Mar 15 PHP
laravel中的一些简单实用功能
Nov 03 PHP
laravel5.1框架model类查询的实现方法
Oct 08 PHP
laravel 5.5 关闭token的3种实现方式
Oct 24 PHP
PHP5.3与5.5废弃与过期函数整理汇总
Jul 10 #PHP
ThinkPHP标签制作教程
Jul 10 #PHP
YII路径的用法总结
Jul 09 #PHP
YII实现分页的方法
Jul 09 #PHP
YII模块实现绑定二级域名的方法
Jul 09 #PHP
yii操作cookie实例简介
Jul 09 #PHP
Yii调试SQL的常用方法
Jul 09 #PHP
You might like
php 面试碰到过的问题 在此做下记录
2011/06/09 PHP
PHP中的use关键字概述
2014/07/23 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
Jquery AJAX 用于计算点击率(统计)
2010/06/30 Javascript
详解jQuery插件开发中的extend方法
2013/11/19 Javascript
JavaScript实现找出数组中最长的连续数字序列
2014/09/03 Javascript
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
详解jQuery简单的表单应用
2016/12/16 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
2020/07/21 Javascript
Python实例一个类背后发生了什么
2016/02/09 Python
pybind11在Windows下的使用教程
2019/07/04 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
德国家具在线:Fashion For Home
2017/03/11 全球购物
幼儿园户外活动总结
2014/07/04 职场文书
病人慰问信范文
2015/02/15 职场文书
公路施工安全责任书
2015/05/08 职场文书
2015年底工作总结范文
2015/05/15 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL