当我尝试获取所有目录的列表并在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);
答案 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不会自动转换任何字符编码。你必须手动完成。