Laravel畸形人物UTF-8

时间:2016-07-11 12:38:20

标签: php json laravel utf-8

当我尝试获取所有目录的列表并在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);

enter image description here

1 个答案:

答案 0 :(得分:5)

您正在使用来自文件系统文件名的字符串。这种字符串通常不是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($str,"UTF-8",$from_encoding)。总体而言,请注意,将HTTP响应编码设置为UTF-8不会自动转换任何字符编码。你必须手动完成。