PHP输出JSON需先设置Content-Type响应头并确保无前置输出,再用json_encode()编码数据,推荐启用JSON_UNESCAPED_UNICODE等选项处理中文和特殊字符,同时检查编码错误、统一返回结构并按需设置HTTP状态码。

PHP输出JSON时,关键是要设置正确的响应头(Content-Type: application/json),再用 json_encode() 输出数据,同时注意中文乱码、错误处理和HTTP状态码等细节。
设置JSON响应头
必须在任何输出之前调用 header(),否则会报“headers already sent”错误:
header('Content-Type: application/json; charset=utf-8');- 推荐加上
charset=utf-8,避免中文显示为乱码或\uXXXX转义 - 如果项目已启用
default_charset(如 PHP 配置中设为 utf-8),可省略 charset,但显式声明更稳妥
编码并输出JSON数据
使用 json_encode() 将数组或对象转为JSON字符串,推荐开启常用选项:
-
JSON_UNESCAPED_UNICODE:防止中文被转成\u4f60\u597d -
JSON_UNESCAPED_SLASHES:避免斜杠被转义(如http:\/\/) -
JSON_INVALID_UTF8_SUBSTITUTE(PHP 7.2+):自动替换非法 UTF-8 字符,避免json_encode()返回false
示例:
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
立即学习“PHP免费学习笔记(深入)”;
header('Content-Type: application/json; charset=utf-8');
$data = ['code' => 200, 'msg' => '操作成功', 'data' => ['name' => '张三']];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
处理错误与空数据
生产环境应避免裸奔输出,建议检查编码结果:
- 若
json_encode()返回false,可用json_last_error_msg()查错 - 对空数组/空对象,确保前端能正常解析(JSON标准允许
{}和[]) - 必要时统一返回结构,例如始终包含
code、msg、data
补充:配合HTTP状态码(可选)
根据业务逻辑设置状态码,增强语义性:
- 成功:默认 200,也可显式写
http_response_code(200) - 参数错误:用
http_response_code(400) - 未授权:用
http_response_code(401) - 资源不存在:用
http_response_code(404)
注意:http_response_code() 应在 header() 之前或之后均可,但需在任何输出前调用。


















