PHP JSON 输出怎么保留中文
发布:smiling 来源: PHP粉丝网 添加日期:2026-09-21 11:47:54 浏览: 评论:0
使用 json_encode($data, JSON_UNESCAPED_UNICODE) 可避免中文转为\uXXXX,需确保PHP≥5.4、响应头设为Content-Type: application/json; charset=utf-8、数据源为UTF-8编码,并统一处理嵌套内容。
PHP json_encode() 中文变成 Unicode 转义怎么办
默认情况下,json_encode() 会把中文字符转成 \uXXXX 形式,比如 "姓名" 变成 "\u59d3\u540d"。这不是 bug,是它的默认行为——它只保证 JSON 合法,不保证可读性。
解决方法很简单:加 JSON_UNESCAPED_UNICODE 标志位。
json_encode($data, JSON_UNESCAPED_UNICODE) 是最直接有效的写法
如果还要兼容空数组/对象输出为 {} 或 [](而非 null),可以叠加 JSON_UNESCAPED_SLASHES 等其他标志
注意:PHP 版本必须 ≥ 5.4.0,老版本不支持该常量,需升级或改用 iconv() + 正则等绕路方案(不推荐)
输出前没设 Content-Type 导致浏览器乱码
即使 JSON 字符串里中文正常了,浏览器仍可能显示方块或问号——大概率是 HTTP 响应头缺失或错误。
务必在 echo 前加:
header('Content-Type: application/json; charset=utf-8');
不能只写 charset=utf8(少了个短横,部分浏览器不认)
不能依赖 HTML meta 标签,JSON 不走 HTML 渲染流程
如果用 Nginx/Apache 做了全局字符集配置,也要确认没被覆盖(例如 PHP-FPM 的 default_charset 设为 "" 才不会干扰)
数据源本身编码不是 UTF-8 会白忙活
json_encode() 只处理已加载到内存的字符串,它不会自动转码。如果从数据库、文件或 POST 请求拿到的是 GBK、BIG5 或 ISO-8859-1 编码的中文,直接传进去会出错或截断。
MySQL 查询前先执行 SET NAMES utf8mb4(或用 PDO 设置 PDO::MYSQL_ATTR_INIT_COMMAND)
读文件时用 file_get_contents() + mb_convert_encoding($content, 'UTF-8', 'GBK') 显式转码
接收 $_POST 数据前,检查 mb_detect_encoding($_POST['text']),必要时统一转 UTF-8
API 返回结构复杂时,别漏掉嵌套字段
有时只对顶层数组调用了 json_encode(),但里面某个值是通过 file_get_contents() 读取的 JSON 字符串,或从第三方接口拼接进来的——这些子内容若含未转义的中文,最终结果仍可能混着 \uXXXX。
避免手动拼接 JSON 字符串,一律用 json_encode() 处理最终完整数组
如果必须合并已有 JSON 字符串,先 json_decode($str, true) 再合并,最后统一 json_encode(..., JSON_UNESCAPED_UNICODE)
调试时用 var_dump(json_last_error_msg()) 检查是否因编码问题导致编码失败(返回空字符串且无报错是常见陷阱)
实际最难缠的往往不是函数怎么调,而是中文在进入 PHP 内存前就已损坏——比如 MySQL 连接层没设对、Nginx 把请求体悄悄转码了、甚至前端发请求时 header 里声明了错误的 Content-Type。留心数据流每个环节的编码状态,比死磕 json_encode() 参数更关键。
Tags: PHP JSON 输出怎么保留中文
- 上一篇:PHP7.3大括号写法如何避免语法错误
- 下一篇:最后一页
相关文章
- ·PHP 是什么?(2013-11-12)
- ·Php.ini文件位置在哪里 Php.ini文件找不到(2013-11-12)
- ·PHP 数据类型(2013-11-12)
- ·php 获取当前脚本的url(2013-11-12)
- ·php技术生成静态页面的实现(2013-11-13)
- ·缺陷月项目启动 披露PHP脚本语言漏洞(2013-11-13)
- ·在PHP中全面阻止SQL注入式攻击(2013-11-13)
- ·php生成随机密码的几种方法(2013-11-13)
- ·PHP中使用FCKeditor2.3.2配置(2013-11-13)
- ·如何使用PHP开发高效的WEB系统(2013-11-13)
- ·php:树形结构的算法(2013-11-13)
- ·php4和php5区别(2013-11-13)
- ·php数据库连接(2013-11-13)
- ·如何正确理解PHP的错误信息(2013-11-13)
- ·php页面漏洞分析及相关问题解决(2013-11-13)
- ·当在连接PHP时,抱怨一些数值没有定义参考?(2013-11-27)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)
