Lumen 和 UTF-8 编码

Lumen and UTF-8 encoding

我在查询我的 MySQL 数据库后尝试 return JSON 响应时遇到 Lumen 5.3 问题。

我的方案和我的所有表都编码在 utf8_general_ci 中,这是给我带来麻烦的代码示例:

public function getUserByMail(Request $request){
    $user = app('db')->table('user')->select('id','lastName', 'firstName','mail','status')->where('mail',$request->input('userMail'))->first();
    return response()->json(
        array('id' => $user->id,
            'lastName' => $user->lastName,
            'firstName' => $user->firstName,
            'mail' => $user->mail,
            'status' => $user->status));
}

有时(但只是有时),这段代码在调用json()方法时抛出异常Malformed UTF-8 characters, possibly incorrectly encoded

我不知道该怎么做才能解决这个问题,有人知道吗?

我终于明白发生了什么:因为我是 运行 Lumen on Wamp 安装,我遇到了这个错误,因为配置加载问题。

Lumen 框架使用DotEnv 加载指定数据库连接信息的.env 文件。但在某些情况下(我怀疑PHP multi-threading支持出现故障),我的请求使用了Laravel(forge@localhost)的默认数据库登录访问数据库,它默默地失败了(遇到的 PDOException 没有被 Lumen 异常处理程序捕获)并且我的 $user 变量没有包含我所期望的,这导致了 UTF-8 错误。

Lumen GitHub (here) 中引用了此问题。

我使用这个 强制加载我的配置解决了这个问题。