php返回json需两步:确保数据结构正确并设置header('content-type: application/json; charset=utf-8');避免额外输出、检查json_encode返回值、使用json_unescaped_unicode支持中文,响应体含html则说明路由或错误输出干扰。

PHP 返回 JSON 数据给前端,核心就两步:确保数据结构正确、设置正确的 HTTP 响应头。漏掉 header('Content-Type: application/json; charset=utf-8') 是最常见导致前端解析失败的原因。
为什么前端收到的是字符串而不是对象?
前端 fetch 或 axios 默认不会自动解析响应体,但更根本的问题常出在 PHP 端:echo json_encode($data) 没配响应头,浏览器把响应当成了 text/html 或 text/plain,JS 就不会触发自动 JSON 解析。
- 必须显式设置
header('Content-Type: application/json; charset=utf-8') - 避免在
json_encode()前后有额外输出(比如空格、BOM、echo或 warning 信息),否则 JSON 格式会被破坏 - 检查
json_encode()是否返回false(可用json_last_error_msg()查错),常见于含非 UTF-8 字符或资源类型变量(如 MySQLi 对象)
如何安全地输出带中文的 JSON?
PHP 默认对非 ASCII 字符做 Unicode 转义(如 "\u4f60\u597d"),虽合法但可读性差;要原样输出中文,必须加 JSON_UNESCAPED_UNICODE 标志。
- 正确写法:
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) - 确保 PHP 文件本身是 UTF-8 编码(无 BOM)
- 数据库连接也要设 UTF-8,例如 PDO 构造时加
;charset=utf8mb4,MySQLi 用$mysqli->set_charset('utf8mb4')
遇到“SyntaxError: Unexpected token
这说明前端收到的不是 JSON,而是 HTML(通常是 PHP 报错页面、重定向跳转、或框架默认首页)。不是 JSON 解析错,是压根没拿到 JSON。
立即学习“PHP免费学习笔记(深入)”;
- 用浏览器开发者工具的 Network 标签页,点开请求,看 Preview/Response 内容——如果看到
,就确认被当成 HTML 返回了 - 检查是否误访问了 .php 文件路径(如
/api/user.php)但该文件实际包含 HTML 输出或重定向逻辑 - 确认没有开启输出缓冲干扰(如
ob_start()后未ob_end_flush()),或错误开启了 display_errors 导致警告混入响应体
真正麻烦的从来不是 json_encode 这一行代码,而是它前面的环境状态和后面的传输链路——字符编码、HTTP 头、输出控制、服务端路由,任一环节松动都会让 JSON “看起来像坏的”。











