You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中去除数据库查询结果中的???字符

解决Laravel Eloquent查询结果对象前出现???乱码的问题

嘿,这个问题我之前踩过坑!返回的对象前出现大量???乱码,而且所有查询都这样,大概率是字符编码不匹配导致的,跟你分享几个我当时解决的思路:

  • 检查数据库连接编码配置
    先看项目根目录的.env文件,确保数据库连接的编码设置正确:

    DB_CHARSET=utf8mb4
    DB_COLLATION=utf8mb4_unicode_ci
    

    再同步config/database.php里的mysql配置:

    'mysql' => [
        // ...其他配置
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
    ],
    

    修改后记得清配置缓存:php artisan config:cache,然后重启服务。

  • 检查数据库表和字段的编码
    登录数据库,查看目标表的编码:

    SHOW CREATE TABLE your_table_name;
    

    如果表的编码不是utf8mb4,执行SQL修改:

    ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    

    同时要确认表内字段的编码也和表一致,有些旧表可能字段单独设置了其他编码。

  • 调整响应的Content-Type头
    有时候是后端返回的响应编码不对,在控制器返回数据时指定编码:

    // 返回JSON的情况
    return response()->json($queryResult, 200, ['Content-Type' => 'application/json; charset=utf-8']);
    // 返回视图的情况,确保模板文件是UTF-8无BOM编码
    

    编辑器保存模板时要注意不要加BOM,很多乱码都是这个小细节导致的。

  • 排查输出方式的问题
    如果你是用dd()或var_dump()直接打印Eloquent对象,可能是终端/浏览器的编码不兼容。试试把对象转成数组再输出:

    dd($queryResult->toArray());
    

    如果转数组后正常,那可以用json_encode($queryResult, JSON_UNESCAPED_UNICODE)来输出,确保字符正确解析。

  • 检查服务器系统编码
    比如Linux服务器的默认编码,执行echo $LANG查看,确保是en_US.UTF-8或对应的UTF-8编码,如果不是,修改系统编码配置后重启服务器。

一般来说,前两个步骤就能解决大部分这类乱码问题,先从数据库编码匹配入手,这是最常见的诱因。

内容的提问来源于stack exchange,提问作者wafutech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:01:40