如何在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
相关产品推荐
相关产品推荐

