宿迁腾云网络网站建设公司

腾云网络 八年经验专注网站建设
  • 首页
  • 服务项目
    • 网站建设
    • 微信小程序
    • APP开发
    • SEO优化
  • 建站费用
  • 成功案例
    • 网站建设案例
    • 小程序案例
    • APP开发案例
    • SEO优化案例
  • 行业动态
    • 网站建设
    • SEO优化
    • 技术日志
  • 联系我们
    • 关于我们
首页 > 行业动态 > 技术日志 > php json encode 编码 PHP项目中遇到中文乱码怎么办?有解决方法吗?

php json encode 编码 PHP项目中遇到中文乱码怎么办?有解决方法吗?

2021-01-31

PHP项目中经常遇到中文乱码,这是一个令人讨厌的问题。但是,当需要将内容输出到网页时,我们遵循以下两个原则,并且通常不会出现中文乱码。

首先是添加html头

第二点是确保文件的编码与meta设置的编码一致。换句话说,如果我们的第一个字符集设置为UTF-8,那么我们的文件编码也应该设置为UTF-8。两者应该保持一致。

当然,以上是针对网页的情况,但是现在随着Ajax在Web应用程序中所占的比例越来越高,json格式的数据在数据传输中的使用越来越广泛。因此,当您使用json_encode在PHP中将数据转换为json时,会遇到中文乱码或中文编码的问题。

例如,

$data = array('id'=>1,'name'=>'迹忆博客','parId'=>0);
echo json_encode($data);

以上代码的输出结果为

php json encode 编码 PHP项目中遇到中文乱码怎么办?有解决方法吗?
(图1)

{"id":1,"name":"\u8ff9\u5fc6\u535a\u5ba2","parId":0}

让我们看一下,该功能已对中文“集意博客”进行了十六进制转码。不能说这是一个错误,因为十六进制表示形式是正确的中文。得到此结果后php json encode 编码,我们还可以通过前端的js获得所需的结果。但是,以这种方式使用仍然很麻烦。当然,情况会因PHP版本而异。

对于某些版本的PHP,结果将如下所示

{"id":1,"name":null,"parId":0}

中文无法正确解析。

没有办法,中国问题太麻烦了。谁使计算机不是中国人发明的?当然,有解决方案。让我们了解两种解决方案。

一、由json_encode的第二个参数解决

为解决上述问题,可以通过json_encode函数本身直接解决PHP> =5.4.0的版本。那是第二个参数加上JSON_UNESCAPED_UNICODE。

$data = array('id'=>1,'name'=>'迹忆博客','parId'=>0);
echo json_encode($data, JSON_UNESCAPED_UNICODE);

现在您可以获得正确的结果

{"id":1,"name":"迹忆博客","parId":0}

正确获得了结果。但是,PHP的版本不能更改为5.4及更高版本。如何处理5.4以下的版本?

二、通过url编码解决中文问题

php json encode 编码 PHP项目中遇到中文乱码怎么办?有解决方法吗?
(图2)

我们知道PHP中有两个函数:urlencode和urldecode。我们可以使用urlencode函数对中文进行url编码,这样字符串中就不会再有中文了,也不会遇到中文编码问题。

$str = “迹忆博客”;
echo urlencode($str);

对Jiyi博客进行网址编码,结果如下

%E8%BF%B9%E5%BF%86%E5%8D%9A%E5%AE%A2

因此,在使用urlencode编码上述数组的名称的值,然后将其转换为json格式后,中文编码的问题将不复存在。

我们现在得到的结果是名称编码后的json字符串

{"id":1,"name":"%E8%BF%B9%E5%BF%86%E5%8D%9A%E5%AE%A2","parId":0}

php json encode 编码 PHP项目中遇到中文乱码怎么办?有解决方法吗?
(图3)

最后,通过urldecode对url编码的字符串进行解码。当然,urldecode解码不需要我们找到相应的编码字符串进行解码。我们可以直接解码整个字符串。 urldecode将自动检测相应的url编码的字符串并将其解码。

$data = array('id'=>1,'name'=>urlencode('迹忆博客'),'parId'=>0);
$res =urldecode(json_encode($data));
echo $res;

所以结果是正确的

{"id":1,"name":"迹忆博客","parId":0}

此方法没有版本限制php json encode 编码,但是效率肯定会比第一种方法慢。

第二种方法的包装函数-通过url编码解决中文问题

现在是问题所在。对于第二种方法,我们不能在数组中的每个中文前面添加urlencode函数!这也是不现实的。然后,我们可以通过自己封装json_encode函数来解决此类问题。

代码如下

function onmpw_json_encode($data){
        if(is_object($data)) return false;
        if(is_array($data)){
            $data = deal_array($data);
        }
        return urldecode(json_encode($data));
}
function deal_array($data){
     if (is_array($data)) {
        foreach ($data as $key => $val) {
            if (is_array($val)) {
                                     //如果是多维数组,通过递归来处理多维数组
                $data[$key] = deal_array($val);
            } else {
                                     //对值进行url编码
                $data[$key] = urlencode($val);
            }
        }
    } elseif (is_string($data)) {
        $data = urlencode($data);
    }
    return $data;
}
下面我们来看一个使用示例
$data = array(
            array('id'=>1,'name'=>'迹忆博客','parId'=>0),
            array('id'=>2,'name'=>'学无止境','parId'=>1),
            array('id'=>3,'name'=>'趣味杂谈','parId'=>1),
            array('id'=>4,'name'=>'编程语言','parId'=>2),
            array('id'=>5,'name'=>'网络','parId'=>2),
            array('id'=>6,'name'=>'算法','parId'=>2),
            array('id'=>7,'name'=>'操作系统','parId'=>2),
            array('id'=>8,'name'=>'数据库','parId'=>2),
            array('id'=>9,'name'=>'WEB前端','parId'=>2),
            array('id'=>10,'name'=>'读书','parId'=>3),
            array('id'=>11,'name'=>'观点与感想','parId'=>3)
        );
$data = onmpw_json_encode($data);
echo $data;

现在我们有了想要的结果

[{"id":"1","name":"迹忆博客","parId":"0"},{"id":"2","name":"学无止境","parId":"1"},{"id":"3","name":"趣味杂谈","parId":"1"},{"id":"4","name":"编程语言","parId":"2"},{"id":"5","name":"网络","parId":"2"},{"id":"6","name":"算法","parId":"2"},{"id":"7","name":"操作系统","parId":"2"},{"id":"8","name":"数据库","parId":"2"},{"id":"9","name":"WEB前端","parId":"2"}, {"id":"10","name":"读书","parId":"3"},{"id":"11","name":"观点与感想","parId":"3"}]

中文编码问题非常普遍,我们都需要根据实际情况进行更多总结。您可以轻松解决将来的开发中的类似问题。

对于上面的自定义json_encode函数,我将其封装在一个公共类中。源代码在github上,我将继续将一些常用功能封装到该公共类中。欢迎下载。希望这对大家有帮助。

Tag: 编码转换 php urlencode
网站制作公众号

宿迁腾云网络网站建设公司 | 网站开发 | 网站制作 | 网站优化

咨询电话:13160355545

上一篇

返回栏目

下一篇

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

热推

  • php登录界面代码一个默认的文件名暴露(一):管理事件和表格分区php界面代码
  • 功能组件第二个就是框架的核心组件,你了解多少?
  • 几款现阶段流行的框架组合,你知道几个?(上)
  • 计算机编程教程列表
  • PHP爱好者免费的邮件服务器软件
  • php实现上行测速2022年第一季度我国移动网络平均下行接入速率达334.Mbps四川电信上行测速
  • 如何使用C语言来编写PHP的扩展,PHP作为一门开源语言
  • php游戏开发框架 的人分个类:程序员和非程序员的运维仿京东商城(基于hdphp框架开发)视频教程(php实战)
  • 应用程序的功能,HTML仍然是唯一的标记语言?
  • php框架排名数据库操作数据库和ORM组件发展最快组件的入门难度php开发框架流行度排名

相关

PHP IDEs与PHP CLI工具:助力高效PHP开发,满

PHP IDEs与PHP CLI工具:助力高效PHP开发,满

什么是PHP?其优势有简单易学、安全性高、开发效率高及社区活

什么是PHP?其优势有简单易学、安全性高、开发效率高及社区活

深入学习PHP编程基础与高级技术,掌握数字时代开发技能

PHP中七个常用框架介绍,详细解读ThinkPHP及其他框架

Science Technology:PHP开发平台发展历程

Science Technology:PHP开发平台发展历程

了解常见PHP应用程序安全威胁,掌握6个常见安全性攻击

了解常见PHP应用程序安全威胁,掌握6个常见安全性攻击

如何查看php版本?多种方法助你快速知晓

如何查看php版本?多种方法助你快速知晓

PHP格式化:提升代码质量与协作效率的关键规则

如何查看虚拟主机上的 PHP 版本?这篇文章告诉你

Linux 系统管理员和 web 开发者必知:如何查看 PH

Linux 系统管理员和 web 开发者必知:如何查看 PH

标签

seo(1182) 市场营销(661) 网站制作(573) 网站建设(564) 搜索引擎(553) 网站(482) PHP(361) 编程语言(345) 建站(294) 关键词排名优化(267) 网站建设公司(245) 优化(216) seo排名(207) 域名(190) 软件(171) 网站优化(148) 搜索引擎优化(146) 外链(141) 科技(136) 网站关键词(124) 网站排名优化(123) 域名服务器(120) 网站排名(107) 时政(103) 排名优化(95) 搜索引擎收录(93) 网站设计(92) 电子商务(88) 引擎(86) 移动互联网(85) 开发框架(79) 开发(75) 网站服务器(74) 框架(68) 前端开发(68) 网站分析(66) 网站建设方案(65) 关键(64) 流量(63) 源码(62) 百度优化(62) 网站权重(61) 开放源代码(59) seo培训(53) 网页设计(51) 百度(51) php框架(50) 网站建设知识(50) 大数据(50) 谷歌(49)
宿迁腾云网络网站建设公司
网站建设
  • 私人定制
  • 标准模板建站
  • 经济模板建站
精品模板

宿迁腾云网络网站建设公司

联系电话:13160355545

公司地址:江苏省宿迁市丽景湾华庭北门都市花园公寓9楼907

联系邮箱:admin@tyweb.net

全国分站
  • 北京
  • 广东
  • 东莞 广州 中山 深圳 惠州 江门 珠海 汕头 佛山 湛江 河源 肇庆 潮州 清远 韶关 揭阳 阳江 云浮 茂名 梅州 汕尾
  • 山东
  • 济南 青岛 临沂 济宁 菏泽 烟台 泰安 淄博 潍坊 日照 威海 滨州 东营 聊城 德州 莱芜 枣庄
  • 江苏
  • 苏州 徐州 盐城 无锡 南京 南通 连云港 常州 扬州 镇江 淮安 泰州 宿迁
  • 河南
  • 郑州 南阳 新乡 安阳 洛阳 信阳 平顶山 周口 商丘 开封 焦作 驻马店 濮阳 三门峡 漯河 许昌 鹤壁 济源
  • 上海
  • 河北
  • 石家庄 唐山 保定 邯郸 邢台 沧州 秦皇岛 张家口 衡水 廊坊 承德
  • 浙江
  • 温州 宁波 杭州 台州 嘉兴 金华 湖州 绍兴 舟山 丽水 衢州
  • 陕西
  • 西安 咸阳 宝鸡 汉中 渭南 安康 榆林 商洛 延安 铜川
  • 湖南
  • 长沙 邵阳 常德 衡阳 株洲 湘潭 永州 岳阳 怀化 郴州 娄底 益阳 张家界 湘西
  • 重庆
  • 福建
  • 漳州 泉州 厦门 福州 莆田 宁德 三明 南平 龙岩
  • 天津
  • 云南
  • 昆明 红河 大理 文山 德宏 曲靖 昭通 楚雄 保山 玉溪 丽江 临沧 思茅 西双版纳 怒江 迪庆
  • 四川
  • 成都 绵阳 广元 达州 南充 德阳 广安 阿坝 巴中 遂宁 内江 凉山 攀枝花 乐山 自贡 泸州 雅安 宜宾 资阳 眉山 甘孜
  • 广西
  • 贵港 玉林 北海 南宁 柳州 桂林 梧州 钦州 来宾 河池 百色 贺州 崇左 防城港
  • 安徽
  • 芜湖 合肥 六安 宿州 阜阳 安庆 马鞍山 蚌埠 淮北 淮南 宣城 黄山 铜陵 亳州 池州 巢湖 滁州
  • 海南
  • 三亚 海口 琼海 文昌 东方
  • 江西
  • 南昌 赣州 上饶 吉安 九江 新余 抚州 宜春 景德镇 萍乡 鹰潭
  • 湖北
  • 武汉 宜昌 襄樊 荆州 恩施 孝感 黄冈 十堰 咸宁 黄石 仙桃 随州 天门 荆门 潜江 鄂州 神农架
  • 山西
  • 太原 大同 运城 长治 晋城 忻州 临汾 吕梁 晋中 阳泉 朔州
  • 辽宁
  • 大连 沈阳 丹东 辽阳 葫芦岛 锦州 朝阳 营口 鞍山 抚顺 阜新 本溪 盘锦 铁岭
  • 黑龙江
  • 齐齐哈尔 哈尔滨 大庆 佳木斯 双鸭山 牡丹江 鸡西 黑河 绥化 鹤岗 伊春 大兴安岭 七台河
  • 内蒙古
  • 赤峰 包头 通辽 呼和浩特 乌海 鄂尔多斯 呼伦贝尔
  • 贵州
  • 贵阳 黔东 黔南 遵义 黔西 毕节 铜仁 安顺 六盘水
  • 甘肃
  • 兰州 天水 庆阳 武威 酒泉 张掖 陇南 白银 定西 平凉 嘉峪关 临夏 金昌 甘南
  • 青海
  • 西宁 海西 海东 海北 果洛 玉树 黄南
  • 新疆
  • 乌鲁木齐 伊犁 昌吉 石河子 哈密
  • 西藏
  • 拉萨 山南 林芝 日喀则
  • 吉林
  • 长春 白山 白城 延边 松原 辽源 通化 四平
  • 宁夏
  • 银川 吴忠 中卫 石嘴山 固原
SiteMap
网站地图
TAG标签
Copyright © 2017-2025 TYWEB.NET 宿迁腾云网络科技有限公司 ALL RIGHTS RESERVED.   苏ICP备17033535号-1

热门搜索

下载 2025 2026 2024 请输入关健词 货源 货货源 虚拟 禅道
  • 客服

    在线客服

  • 电话

    13160355545

  • 微信

精品模板
建站费用
成功案例
联系我们