PHP转含有中文的数组,解决乱码

本文分享了在PHP中使用json_encode()函数处理中文字符的经验,介绍了如何避免中文被转为Unicode,通过设置参数实现更优的JSON字符串输出。

使用 PHP的 json_encode () 函数

今天需要将含有中文的数组转为json格式,第一尝试,将中文也转义了

第二次成功解决,故做此记录

 

尝试1:

将返回的数组直接 json_encode,发现中文也被转码了

不是我要的效果

$arr=array('key'=>'中文');
$rel=$json=json_encode($arr);
print_r($rel);

效果:{"key":"\u4e2d\u6587"}

 

复习小知识:

PHP5.4 以后的版本 多了一个参数,

json_encode($arr,option)

 

其中有2个比较常用到的参数:

参数1:中文不转为unicode ,对应的数字 256

JSON_UNESCAPED_UNICODE

json_encode($arr,JSON_UNESCAPED_UNICODE/256); //JSON_UNESCAPED_UNICODE或者数字都行


 

参数2:不转义反斜杠,对应的数字 64

JSON_UNESCAPED_SLASHES

json_encode($arr,JSON_UNESCAPED_SLASHES/64); //JSON_UNESCAPED_SLASHES或者数字都行

 

通常json_encode只能传入一个常量,如果同时使用2个常量怎么办?

JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES = 320

使用方法:json_encode($arr,320);即可完成同时使用2个常量。

$arr = array('key'=>'中文/前面的斜杠不会被转义');

json_encode($arr,320);

效果:

{"key":"中文/前面的斜杠不会被转义"}

 

尝试2:

$arr=array('key'=>'中文');
$rel=$json=json_encode($arr,256);//最关键的一句

print_r($rel);

效果:

{"key":"中文"}

 

 

OK,学到了新知识,很开心 ~~

 

### PHP返回中文乱码解决方案 在处理PHP返回信息中的中文乱码问题时,通常需要关注以下几个方面: 1. **设置HTTP响应头** 确保服务器端发送的HTTP响应头中包含了`Content-Type: application/json;charset=utf-8`的信息。这一步可以有效告知浏览器或其他接收方数据的内容类型以及使用的字符集为UTF-8[^1]。 2. **确保PHP文件本身的编码格式为UTF-8无BOM** 如果PHP脚本本身不是以UTF-8编码保存,则可能导致输出的字符串已经损坏。因此,在编写PHP代码之前,请确认编辑器已将文件保存为UTF-8编码(建议关闭BOM),这样能避免因源文件编码错误引发的问题。 3. **统一数据库连接及查询操作的编码方式** 当涉及到从数据库读取数据并将其作为JSON对象返回的情况下,还需要注意MySQL连接和执行SQL语句过程中所采用的字符集是否一致。可以通过如下命令来设定整个会话期间都使用utf8mb4字符集: ```sql SET NAMES 'utf8mb4'; ``` 4. **调整PHP内部默认字符集配置项** 可通过修改php.ini文件或者动态调用来改变当前运行环境下的default_charset参数值为'UTF-8'。例如下面这段代码展示了如何临时更改此属性: ```php ini_set('default_charset', 'UTF-8'); ``` 5. **正确地序列化含有非ASCII字符的数据结构到JSON格式** 使用内置函数json_encode()的时候,默认情况下它会对某些特殊字符进行义处理。为了保持原始输入不变,可能需要用到额外选项JSON_UNESCAPED_UNICODE: ```php echo json_encode($data, JSON_UNESCAPED_UNICODE); ``` 综上所述,针对您提到的现象——即code=500,msg字段显示有误的情况,可能是由于上述任何一个环节未妥善处理所致。以下是综合考虑后的示范代码片段: ```php <?php // 设置默认字符集为 UTF-8 ini_set('default_charset', 'UTF-8'); // 告诉客户端我们即将提供的是带有特定编码的应用程序级数据包 header('Content-Type: application/json;charset=utf-8'); try { // 这里假设$data是从某个地方获取来的关联数组或者其他复杂数据类型实例... $result = [ "status" => true, "message" => "成功", "data" => ["name"=>"张三", "age"=>25] ]; // 将结果换成 JSON 字符串表示形式,并保留原有的 Unicode 序列而不做进一步加工。 echo json_encode($result, JSON_UNESCAPED_UNICODE); } catch (\Throwable $th) { http_response_code(500); error_log($th->getMessage()); $errorResponse = array( 'code'=>500, 'msg'=>'发生未知异常' ); echo json_encode($errorResponse , JSON_UNESCAPED_UNICODE ); } ?> ``` 以上就是关于解决PHP返回信息中存在中文乱码现象的一些常见策略及其具体实施细节说明[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Colt666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值