【问题标题】:Lumen and UTF-8 encoding流明和 UTF-8 编码
【发布时间】:2018-08-20 13:24:56
【问题描述】:

在查询我的 MySQL 数据库后尝试返回 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

我不知道该怎么做才能解决它,有人有想法吗?

【问题讨论】:

  • 尝试 var_dump 产生这个错误的值。然后你就会看到问题所在
  • 向我们展示您指定客户端字符集的连接代码。

标签: php mysql encoding utf-8 lumen


【解决方案1】:

我终于明白发生了什么:当我在 Wamp 安装上运行 Lumen 时,由于配置加载问题,我遇到了这个错误。

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

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

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

【讨论】:

    猜你喜欢
    • 2012-06-30
    • 2012-06-17
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2015-03-18
    • 2012-11-13
    相关资源
    最近更新 更多