php json_encode 中文乱码解决方法

解决 PHP JSON Encode 函数中文编码乱码的方法 综上所述,我们可以通过指定 JSON_UNESCAPED_UNICODE 选项、设置文档的字符编码或使用 mb_convert_encoding 函数来解决 PHP JSON Encode 函数中文编码乱码的问题。根据实际情况选择适合的方法,确保中文字符正确地显示在生成的 JSON 字符串中。函数时,可以使用 JSON_UNESCAPED_UNICODE 选项,它可以确保中文字符不会被转义成 Unicode 编码。这样,输出的 JSON 字符串中的中文字符将保持原样,不再出现乱码。 阅读详情

之前,项目中就碰到了json_encode()中文编码点问题,我当时就搜了些资料,写了博客,写了一个php版本兼容的函数:

 

php的json_encode()中文编码问题


当时,只是找到了答案,并未详细看。

今天一个同事,又问起我这个函数里面的各种细节,我就仔细看了下:

preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", json_encode($arr))

1.最外层的 preg_replace(),替换函数。

json_decode()中文字符,默认是 '\uxxxx',转成了unicode编码。这里就是匹配 \uxxxx,替换为 iconv()执行后的结果

2.开始看下 iconv(),编码转换函数。

将pack()返回的结果,从编码 'UCS-2BE' 转变为 'UTF-8'。说明pack()返回的字符串就是 'UCS-2BE' 编码格式。

3.分析最内层的 pack(),根据给定的参数格式,将传入的数据变量,转换为binary(二进制)字符串。

手册中的pack(string $format [, mixed $args [, mixed $... ]])

看下 $format 列表:

Code Description
aNUL-padded string
ASPACE-padded string
hHex string, low nibble first
HHex string, high nibble first
csigned char
Cunsigned char
ssigned short (always 16 bit, machine byte order)
Sunsigned short (always 16 bit, machine byte order)
nunsigned short (always 16 bit, big endian byte order)
vunsigned short (always 16 bit, little endian byte order)
isigned integer (machine dependent size and byte order)
Iunsigned integer (machine dependent size and byte order)
lsigned long (always 32 bit, machine byte order)
Lunsigned long (always 32 bit, machine byte order)
Nunsigned long (always 32 bit, big endian byte order)
Vunsigned long (always 32 bit, little endian byte order)
qsigned long long (always 64 bit, machine byte order)
Qunsigned long long (always 64 bit, machine byte order)
Junsigned long long (always 64 bit, big endian byte order)
Punsigned long long (always 64 bit, little endian byte order)
ffloat (machine dependent size and representation)
ddouble (machine dependent size and representation)
xNUL byte
XBack up one byte
ZNUL-padded string (new in PHP 5.5)
@NUL-fill to absolute position
我们使用的是 'H' -  十六进制格式,每次格4位,高四位在前,默认读取10进制数据(我也不懂。。。。)

'\\1' 是 preg_replace() 里的向后引用,即匹配到的单个 '\uxxxx' 中文unicode编码。

最终再结合iconv(),得到了 "中文汉字"!

1.看来 pack() 也得查查了,先链接一个:

 

PHP: 深入pack/unpack

大家可以看看这篇作者的其它pack相关,貌似很屌!我看了这篇,感觉作者应该很厉害
手册上,说pack是根据perl的pack,所以,有人说了句:想搞懂,需要看这个:

http://perldoc.perl.org/perlpacktut.html - 貌似是perl文档

涉及的都太底层了,网络传输等

2.json_encode()中文乱码的3种解决方案总结,总结的也不错,转载过来:

php json_encode 中文乱码解决方法

Python使用struct处理二进制(pack和unpack用法) 有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize() # 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) pack(fmt, v1, v2, ...) # 按照给定的格式(fmt)解析字节流string,返回解析出来的tuple unpack(fmt, string) # 计算给定的格式(fmt)占用多少字节的内存 calcsize(fmt 立即下载

相关推荐

php中json_encode UTF-8中文乱码的更好解决方法

网上找到说json_encode编码设置为UTF-8中文就不会乱码,在用过一段时间之后就不太管用了,下面与大家分享更好的方法

解决php转json后的中文乱码

json_encode($data)未正确输出中文;而是输出中文编码Unicode,类似于 "\u5c0f\u660e";

weixin_57666779的博客 2623

CocosCreator视频播放黑屏?手把手教你封装VideoPlayer组件解决Web环境问题

本文针对Cocos Creator在Web环境下视频播放黑屏等常见问题,提供了一套工程化的VideoPlayer组件封装解决方案。文章深入剖析了浏览器自动播放策略、DOM样式隔离等核心挑战,并手把手教你实现一个健壮的管理器,涵盖兼容性处理、性能优化与内存管理,确保视频播放稳定流畅。

plum99的博客 598

php JSON_encode有中文乱码

$create = array( "userid"=>$date['id'], "name"=>$date['name'], "mobile"=>$date['phone'], "department"=>[$date['jurisdiction_id']], "position"=>$posi...

qq_34631220的博客 332

ESP32水墨屏日历实战:低功耗自动更新与HTTPS数据解析

本文详细介绍了ESP32水墨屏日历项目的开发实践,重点讲解了低功耗自动更新与HTTPS数据解析的实现方法。通过ESP32的自动休眠功能和水墨屏的零功耗特性,结合HTTPS请求安全获取网络数据,实现了高效节能的桌面日历应用。项目代码开源,适合物联网开发者参考。

xx56789的博客 777

昇腾310B实战:FFmpeg硬件加速全流程解析与性能优化

本文详细解析了昇腾310B与FFmpeg硬件加速的全流程,包括环境配置、性能优化及常见问题排查。通过实战案例展示,昇腾310B在视频转码中性能提升可达6倍,同时降低功耗,特别适合多媒体处理和高性能计算场景。

m3n5b7v8c9x的博客 735

PHP JSON编码后,中文乱码的解决办法

<? include_once("inc/conn.php"); include_once "inc/utility_all.php"; include_once "inc/utility_org.php"; include_once "inc/utility_sms2.php"; include_once "inc/utility_sms1.php"; function getbyname($user_id){ $querya="select byname from user where us.

1050

FPGA新手必看:用USB转TTL实现串口通信的完整流程(附CH340G电路详解)

本文为FPGA新手提供了通过USB转TTL模块实现串口通信的完整实战指南。详细解析了CH340G电路设计要点、硬件连接方法,并分享了经过验证的Verilog代码框架,帮助读者快速掌握FPGA与PC通信的核心技术,解决电平匹配与波特率设置等常见问题。

cake8的博客 1050

php 中文 decode_PHP中json_decode函数中文乱码如何解决?

PHP中json_decode函数中文乱码如何解决?PHP中json_decode函数中文乱码解决方法:1、使用函数“urldecode()”将数据进行解码,解码后再进行JSON解码,其函数的作用是解码已编码的URL字符串;2、在JSON编码的时候,不要将中文编码即可。示例代码...

weixin_32516271的博客 917

truetime2.0使用说明

truetime2.0使用说明1.1 truetime2.0工具箱的下载与安装1.2 truetime2.0工具箱的配置1.3 truetime2.0各模块的说明 注意,以下出现的地址本电脑MATLAB安装路径,请注意自己的MATLAB安装路径 1.1 truetime2.0工具箱的下载与安装 步骤1)没有工具箱的朋友可以 在可以在这个网站上免费申请下载http://www.control.lth.se/truetime/,里面有最新的版本。我用的是TrueTime 2.0 beta 1 步骤2)将

小六@sll 浊酒一杯 畅谈三千 清茶一壶 念游四海 4202

电池管理系统(BMS)系列—状态估计之SOH

BMS系列文章,介绍了SOH估计

zxx52113140的博客 1846

PHP json_encode中文乱码解决方法

相信很多人在使用Ajax与后台php页面进行交互的时候都碰到过中文乱码的问题。JSON作为一种轻量级的数据交换格式,备受亲睐,但是用PHP作为后台交互,容易出现中文乱码的问题。JSON和js一样,对于

zhengxiuchen86的博客 2537

C#上位机与VisionPro通用框架:视觉标定、通信联动与现场排坑实战

工业自动化设备的上位机开发,往往面临流程控制、视觉检测、通信交互等环节的重复搭建。C#作为主流工业语言,配合VisionPro视觉软件,可通过通用框架设计将状态机调度、相机采集、标定算法与串口/扫码枪通信等底层能力模块化,从而大幅降低项目交付成本。其核心原理在于:将设备工艺差异封装至配置层,视觉流程通过CogToolBlock工具链与VPP模板复用,九点标定建立像素与机械坐标系的映射关系。该方案已在螺丝锁付、点胶定位等多类产线落地,尤其适用于批量交付、换型频繁的视觉设备场景。这套从实践中沉淀的框架思路,以及

weixin_31102231的博客 339

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

本文讲述了php中json_encode处理gbk与gb2312中文乱码问题的解决方法,具体方法如下:1.json_encode()中文在gbk/gb2312中对中文返回为null$arr = array (array ('catid' => '4','catname' => 'www.jb51.net','meta_title' => '脚本之家'));echo json_en...

weixin_39918747的博客 139

【AI Agent】Hermes Agent解析

Hermes Agent:一个具备持久化学习能力的开源AI Agent框架 核心特点: 突破传统Agent的"无状态困境",通过记忆系统(SQLite+FTS5全文检索)实现跨会话经验积累 支持200+模型自由切换,11种模型家族和15+平台接入 五层架构设计(入口层、编排层、推理层、工具执行层、存储层)实现平台无关性 47+内置工具和动态技能沉淀机制,支持从任务执行中自动提炼可复用Skill 独特的四层记忆体系(会话/每日/长期/向量索引)和辩证式用户建模 与传统Agent对比: 具备自我进化能力,通过A

sysu_lluozh 940

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

PHP——json_encode 中文乱码的解决方法

1.乱码截图: 2.php文件 <?php header("Content-type:text/json;charset=utf8"); //定义参数 //表单验证 if(empty($id)){ //连接数据库 $con = mysql_connect("localhost","root","root"); //设置数据库字符集 mysql_query...

zkw_1998的博客 1604

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

php用json_encode编码后乱码,php json_encode()函数中文编码乱码解决方法_PHP教程

在我使用php json_encode()时,如果是英文或数字没一点问题,但是用到中文是居然出现不可识别的中文乱码了,下面看我解决json_encode中文乱码方法。在网上找到一种解决方法:代码如下复制代码后来请教了别人,还可以用base64编码,不过base64编码不可以放在URL中,百度是这样解释的:标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”...

weixin_35326667的博客 750

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

php json_encode后乱码,php json_encode 中文乱码的解决方法

json_encode对中文的处理一直是有问题的,1.不能处理GB编码,所有的GB编码都会替换成空字符.2.utf8编码的中文被编码成unicode编码,相当于javascript的escape函数处理的结果.为了能正确使用json,方法一:将数据转成JSON之后,将unicode编码的中文替换成utf8编码的中文首先我们就应该在编码上采用utf8编码,然后再对json_encode的返回结果稍加...

weixin_39530557的博客 3337

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

本文讲述了php中json_encode处理gbk与gb2312中文乱码问题的解决方法,具体方法如下:1.json_encode()中文在gbk/gb2312中对中文返回为null$arr = array (array ('catid' => '4','catname' => 'www.jb51.net','meta_title' => '脚本之家'));echo json_en...

weixin_39866881的博客 207

PHP json_encode中文乱码解决方法--json乱码处理

后台PHP页面(页面编码为UTF-8或者已经把字符转为UTF-8)使用json_encode将PHP中的array数组转为JSON字符串。例如: $testJSON=array('name'=>'中文字符串','value'=>'test'); echo json_encode($testJSON); ?> 查看输出结果为: {“name”:”\中\文\字\符\串″

HackProgramer的专栏 3028

PHP,postgresQL,json_encode,sphinx 中文显示乱码解决方法总结

前言:         之所以写这边文章,是因为最近一而再再而三的碰到由于编码不一致而导致中文显示出问题。 为什么:         1、为什么会有存在编码这个问题呢?         每个计算机软件都会采取自己的一个信息编码方式,所以采用的字符集也不一样。但是采用不同编码方式的计算机软件之间进行通信的话,就会出现“语言障碍”了。就好比不懂中文的外国人看不懂用中文书写个他的邮件一样。

滴答滴--依旧 4340
上一篇: phpmyadmin文件最大上传限制修改
下一篇: php json_encode 中文乱码解决方法
beyond__devil
博客等级 码龄14年 147粉丝 314原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值