PHP解析JSON中文转义json_encode解决 PHP
前言
json_encode 后中文变成 \uXXXX 转义码,影响可读性和前端处理。加 JSON_UNESCAPED_UNICODE 参数即可保留中文。本文讲解编码参数、解析 JSON、处理错误和中文长度注意。
操作步骤
1. 输出不转义中文
$data = ['name' => '刘馨怡'];
echo json_encode($data, JSON_UNESCAPED_UNICODE);
// {"name":"刘馨怡"}
2. 同时美化输出
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
3. 解析 JSON 字符串
$obj = json_decode($json, true); // true 返回数组
4. 检查解析错误
$obj = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo 'JSON 错误:' . json_last_error_msg();
}
5. 处理 UTF-8 合法性
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
6. 保留换行斜杠等控制符按需加参数。
常见坑
- 漏加 JSON_UNESCAPED_UNICODE,中文全变 \u 码。
- json_decode 第二参不传 true,得到对象而非数组。
- 输入含非法 UTF-8,encode 返回 false。
- 中文引号、换行未转义,前端解析失败。
- JSON 不支持关联外的循环引用,会报错。
- 数字精度问题用 JSON_PRESERVE_ZERO_FRACTION。
- HTTP 响应要设 Content-Type: application/json。
总结
json_encode 加 JSON_UNESCAPED_UNICODE 保留中文,PRETTY_PRINT 美化;json_decode 传 true 得数组,用 json_last_error_msg 查错。输入必须合法 UTF-8,输出设 JSON 响应头。
遇到问题加QQ23979811 协助处理