Php 拉威尔畸形字符UTF-8

Php 拉威尔畸形字符UTF-8,php,json,laravel,utf-8,Php,Json,Laravel,Utf 8,当我试图获取所有目录的列表并在JSON响应中使用该列表时,我得到一个错误,即响应的UTF-8字符格式不正确。 我知道我在目录里有像“ÆØÅ”这样的字母。当我使用dd($directories)时,我可以看到每个包含“ÆØÅ”字母的目录前面都有一个“b”(如图所示) 我试着用这个,但也不行。 return response()->json($movies,200,['Content-type'=>'application/json;charset=utf-8'],json\u UNESCAPED\

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

我试着用这个,但也不行。
return response()->json($movies,200,['Content-type'=>'application/json;charset=utf-8'],json\u UNESCAPED\u 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);

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

$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\u convert\u编码($str,“UTF-8”和$from\u编码)
。总的来说,请注意,将HTTP响应编码设置为UTF-8不会自动转换任何字符编码。您必须手动执行此操作。

创建JSON的数据来自哪里?是UTF-8吗?我将编辑帖子并添加我使用的内容。将
$movies[]=utf8\u编码($movie)工作得更好?文件系统文件名(您正在使用的)通常不是UTF-8,您从何处获得输出?@apokryfos谢谢,这确实有效!用它来回答,我会勾选它。:)