当我尝试获取所有目录的列表并在 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);
最佳答案
您正在使用来自文件系统文件名的字符串。此类字符串通常不在 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 不会自动转换任何字符编码。您必须手动执行此操作。
关于php - Laravel 畸形字符 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38307155/