laravel api 中文乱码需先区分真乱码与unicode转义:前者因content-type缺charset导致,后者因json默认转义;修复需禁用json_unescaped_unicode并强制声明application/json; charset=utf-8,同时确保php文件、数据库连接及表结构均为utf-8编码。

当你用 Laravel 开发 API 接口,返回的 JSON 数据里中文变成乱码、问号或 Unicode 编码(如 你好),说明响应未正确声明字符集或 PHP 的 JSON 编码器强制转义了 UTF-8 字符。这不是前端解析问题,而是服务端输出阶段已出错。
确认乱码真实类型
先区分是真乱码还是 Unicode 转义:用 curl 或 Postman 直接请求接口,查看原始响应体。若看到 "\u4f60\u597d" 这类序列,属于 JSON 默认 Unicode 转义——不是乱码,但不友好;若看到 或方块符号,则是字符集未声明导致客户端误读为 ISO-8859-1,这才是真乱码。
这一步必须做,因为两种问题的修复路径完全不同。
禁用 JSON 中文 Unicode 转义
方法一:全局覆盖 JsonResponse 编码选项(推荐)
打开 vendor/laravel/framework/src/Illuminate/Http/JsonResponse.php,定位到 __construct 方法,在 parent::__construct(...) 调用前插入:
$this->encodingOptions = JSON_UNESCAPED_UNICODE;
【注意】此修改会直接影响所有 response()->json() 调用,且 Composer 更新后会被覆盖。生产环境建议改用方法二。
方法二:封装自定义响应辅助函数
在 app/Helpers/ApiHelper.php 中创建静态方法:
public static function json($data, $status = 200, array $headers = []) { return response()->json($data, $status, $headers)->setEncodingOptions(JSON_UNESCAPED_UNICODE); }
控制器中调用:return ApiHelper::json(['msg' => '操作成功']);。这种方式不侵入框架源码,升级安全。
强制声明 Content-Type 带 charset
第一步:在 API 基础控制器构造函数中统一设置
若使用 App\Http\Controllers\ApiController 作为所有 API 控制器父类,在其 __construct() 中添加:
$this->middleware(function ($request, $next) { $response = $next($request); $response->header('Content-Type', 'application/json; charset=utf-8'); return $response; });
第二步:确保中间件注册顺序正确
检查 app/Http/Kernel.php 中 $middlewareGroups['api'] 数组,该中间件必须放在 SubstituteBindings::class 之后、任何可能修改响应头的中间件之前。
第三步:验证响应头是否生效
用浏览器开发者工具或 curl -I http://your-api.com/api/test 查看响应头,确认含 Content-Type: application/json; charset=utf-8。缺失则说明中间件未执行或被覆盖。
排查文件与数据库编码源头
① 检查所有 PHP 文件保存编码
用 VS Code 或 PhpStorm 打开 routes/api.php、控制器、语言包文件,右下角确认显示 “UTF-8”,不是 “GBK” 或 “ISO-8859-1”。非 UTF-8 编码的 PHP 文件会导致字符串字面量本身就是乱码。
② 验证数据库连接配置
打开 config/database.php,找到 MySQL 配置段,在 'options' => [] 中加入:
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
③ 确认数据库表字符集
执行 SQL:SHOW CREATE TABLE users;,检查 DEFAULT CHARSET=utf8mb4 且字段 Collation 为 utf8mb4_unicode_ci。若为 latin1,需执行 ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











