php接口返回json需两步:先设置header('content-type: application/json; charset=utf-8'),再用json_encode($data, json_unescaped_unicode | json_unescaped_slashes)输出;注意无前置输出、数据可序列化、避免bom和空格。

PHP接口返回JSON,核心是两件事:设置正确的响应头、用json_encode()输出数据。只要这两步做对,前端就能正常接收和解析。
设置Content-Type为application/json
告诉浏览器或调用方:我返回的是JSON格式,不是HTML或纯文本。必须在输出任何内容前调用header():
header('Content-Type: application/json; charset=utf-8');- 加上
charset=utf-8能避免中文乱码(尤其有中文字段时) - 注意:不能有任何输出(包括空格、BOM头、echo前的换行)在
header()之前,否则会报“headers already sent”错误
用json_encode()编码数据并输出
把PHP数组或对象转成JSON字符串,然后直接echo出去:
$data = ['code' => 200, 'msg' => '成功', 'data' => ['id' => 1, 'name' => '张三']];echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);-
JSON_UNESCAPED_UNICODE让中文不被转成\uXXXX,可读性更好 -
JSON_UNESCAPED_SLASHES避免URL里的斜杠被转义(如"url":"https:\/\/example.com"→"url":"https://example.com")
加个简单的完整示例
一个最简可用的接口文件(比如api.php):
<?php header('Content-Type: application/json; charset=utf-8');
$data = [
'code' => 200,
'msg' => '请求成功',
'data' => ['user_id' => 123, 'nickname' => '小明']
];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
?>
访问这个PHP文件,浏览器或curl会看到标准JSON响应,前端fetch().then(res => res.json())就能直接解析。
常见问题提醒
- 如果返回空白页,先检查是否有警告/错误输出(开启
error_reporting(E_ALL); ini_set('display_errors', '1');调试) - 确保数组里没有资源类型(如MySQL连接句柄)、不可序列化的对象,否则
json_encode()返回false - 需要兼容老版本PHP(如5.3以下),去掉
JSON_UNESCAPED_UNICODE等标志位 - 生产环境建议加
exit;在echo后,防止意外输出多余内容
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











