Laravel无法正确解析外来字符的响应

时间:2018-06-12 09:53:21

标签: json laravel utf-8

在寻找合适的答案后,我发现人们提供的解决方案不起作用,所以我在这里发帖,希望得到一些帮助。

我有一个用户数据库,它将按目录中的第一个字母列出。但是有一个用户会破坏结果,因为他们的名字以带有外来字符的字母开头,即Á。

我通过以下方式获得用户结果:

$users = $this->users->getAll($params);

然后使用json编码的集合返回响应:

return response()->collection($users);

但如果在结果中返回上述用户,则会出现以下错误:

  

Response内容必须是字符串或对象实现   __toString(),'boolean'给出。

我尝试使用JSON_UNESCAPED_UNICODE选项,就像很多人在解决方案中建议的那样:

return response()->json($users, 200, ['Content-type'=> 'application/json; charset=utf-8'], JSON_UNESCAPED_UNICODE);

但事实证明,在尝试记录后,响应不会以UTF-8的形式返回。但是,据我所知,数据库是UTF-8编码的,所以我不明白这里发生了什么。

问题是,即使我要将角色更改为常规A,仍然会有未来的用户在其名称中包含外来字符,我宁愿有适当的东西来处理这个问题。

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

整理utf8mb4_unicode_ci对我来说很好。
如果你提到你的数据库整理,那么它就会使你的问题更具可读性。

答案 1 :(得分:0)

在config / database.php中:

'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
    ],

现在将列整理为:utf8mb4_unicode_ci。 希望这有效。感谢。