PHP JSON函数默认支持UTF-8中文,乱码主因是编码不一致;需确保数据源、传输和输出全程UTF-8统一,并用JSON_UNESCAPED_UNICODE避免中文转义,响应头设charset=utf-8。

PHP 的 JSON 函数(如 json_encode() 和 json_decode())默认能正确处理 UTF-8 编码的中文,但常见乱码问题几乎都源于编码不一致——不是函数本身的问题,而是输入数据或输出环境未统一为 UTF-8。
确保源字符串是 UTF-8 编码
如果中文来自数据库、文件或用户输入,必须确认其编码是 UTF-8。例如:
- MySQL 查询前执行
SET NAMES utf8mb4,并确保表字段用utf8mb4_unicode_ci排序规则; - 读取文件时用
file_get_contents()前确认文件保存为 UTF-8 无 BOM; - 接收 POST 数据时,前端表单需声明
<meta charset="UTF-8">,且 PHP 不做额外转码(如避免用iconv()或mb_convert_encoding()错误转换)。
json_encode() 中文不转义成 Unicode
默认情况下,json_encode() 会把中文字符转成 \uXXXX 格式(如 "\u4f60\u597d"),虽合法但可读性差。启用 JSON_UNESCAPED_UNICODE 选项即可保留原样:
echo json_encode(['name' => '张三'], JSON_UNESCAPED_UNICODE);
输出:{"name":"张三"}(而非 {"name":"\u5f20\u4e09"})
json_decode() 正确解析含中文的 JSON 字符串
只要传入的 JSON 字符串本身是合法 UTF-8 编码(比如由前端发送或文件读取),json_decode() 就能正常解析出中文。注意两点:
- 检查返回值是否为
null:若返回null且输入非空,大概率是 JSON 格式错误或编码损坏(可用json_last_error_msg()查看具体原因); - 不要对已解码结果再做
utf8_encode()或mb_convert_encoding(),这会导致二次编码,引发乱码。
输出到浏览器时设置 UTF-8 响应头
即使 JSON 内容正确,若 HTTP 响应头未声明编码,浏览器可能用 GBK 等编码解析,导致中文显示为方块或乱码:
header('Content-Type: application/json; charset=utf-8');
这行代码应在 json_encode() 输出前调用,确保浏览器按 UTF-8 解析响应体。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











