php - 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_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

最佳答案

您正在使用来自文件系统文件名的字符串。此类字符串通常不在 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/

相关文章:

javascript - 从 JSON 中获取列名

javascript - JSON-Schema Draft-04 - OneOf 需要

php - 在数据库种子期间禁用 Laravel 电子邮件

php - 如何使用 php prepared-statement 从 MySQL 返回 Json 格式的对象数组

php - 我需要有关 MySQL SELECT 查询的帮助

javascript - 如何使用js和php创建类似于Google analytic的跟踪脚本?

php - 使用 PHP 动态添加到 .htaccess 文件?

javascript - 在ajax数据中发送存储过程

php - 获取额外数据透视表列 laravel 的值

javascript - laravel中使用ajax jquery将数据添加到数据库