【问题标题】:Laravel malformed character UTF-8Laravel 格式错误的字符 UTF-8
【发布时间】:2016-11-13 09:54:58
【问题描述】:

当我尝试获取所有目录的列表并在 JSON 响应中使用该列表时,我收到响应包含格式错误的 UTF-8 字符的错误。 我知道我在目录中有像“Æ Ø Å”这样的字母。当我使用dd($directories) 时,我可以看到每个目录前面都有一个“b”,其中包含一个“Æ Ø Å”字母(如您在照片中看到的那样)。

我尝试使用它,但这也不起作用。 return response() -> json($movies, 200, ['Content-type'=> 'application/json; charset=utf-8'], JSON_UNESCAPED_UNICODE);

编辑: 这是我现在拥有的代码。

$drives = ['M1', 'M2', 'M3', 'M4'];
$movies =[];

foreach ($drives as $drive) {

    $disk = Storage::disk($drive);
    foreach ($disk -> directories() as $movie) {
        $movies[] = $movie;
    }

}

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

【问题讨论】:

  • 您创建 JSON 的数据来自哪里?是 UTF-8 吗?
  • $movies[] = utf8_encode($movie); 会更好吗?文件系统文件名(您正在使用)通常不是 UTF-8
  • 你从哪里得到输出?
  • @apokryfos 谢谢,这确实有效!做一个答案,我会勾选它。 :)

标签: php json laravel utf-8


【解决方案1】:

您正在使用来自文件系统文件名的字符串。此类字符串通常不在 UTF-8 中,并且(通常)使用 ISO-8859-1。巧合的是,这是utf8_encode 工作所需的输入编码。

$drives = ['M1', 'M2', 'M3', 'M4'];
$movies = [];

foreach ($drives as $drive) {
    $disk = Storage::disk($drive);
    foreach ($disk -> directories() as $movie) {
        $movies[] = utf8_encode($movie);
    }
}

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

但是,如果您确实希望从另一种(已知)编码转换为 UTF-8,则需要使用 mb_convert_encoding。总的来说,请注意将 HTTP 响应编码设置为 UTF-8 不会自动转换任何字符编码。您必须手动执行此操作。

【讨论】:

    猜你喜欢
    • 2014-05-20
    • 2019-06-30
    • 1970-01-01
    • 2018-05-24
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多