尝试在 laravel 中保存 utf-8 时出现问题

issue trying to save utf-8 in laravel

在我的 laravel 应用程序中,我正在开发一个具有两个功能的控制器,用于将用户添加到数据库(排除多余代码)。

第一个函数从表单获取输入并创建一个用户:

public function addSingleUser() {
    $first_name = Input::get('firstName');
    $last_name  = Input::get('lastName');
    $email      = Input::get('email');
    $password   = str_random(6);

    $user = new User();
    $user->first_name = $first_name;
    $user->last_name  = $last_name;
    $user->email      = $email;
    $user->password   = Hash::make($password);
    $user->save();
}

第二个函数从 csv 中读取数据并创建多个用户:

public function addManyUsers() {
    putenv("LANG=fr_FR.UTF-8");
    $users = Input::file('users');
    $file = fopen($users,"r");

    while($info = fgetcsv($file, 4096)) {
        $first_name = trim($info[0]);
        $last_name = trim($info[1]);
        $email = trim($info[2]);
        $password   = str_random(6);

        $user = new User();
        $user->first_name = $first_name;
        $user->last_name = $last_name;
        $user->email = $email;
        $user->password = Hash::make($password);
        $user->save();
    }

    fclose($file);
}

由于用户名可以有特殊字符,我需要能够在数据库中存储utf-8字符。如果我在第一个函数中使用 utf-8 字符(通过表单输入),所有内容都会正确存储在用户 table 中。但是,如果我在第二个函数中使用 utf-8 字符(通过 csv),字段存储不正确并在第一个特殊字符处被截断(例如:"Michæl" 存储为 "Mich")。

我认为这可能是 fgetscsv() 没有正确读取数据的问题,但是当我尝试对字段进行数据转储时(例如:dd($first_name);),输出的字符串是正确的,包含特殊字符。如果我尝试 dd($user);,也是如此。所以如果第一个函数能够正确保存到数据库,我很困惑为什么第二个函数不能?

您是否尝试过在编辑器中打开您的 csv 文件并使用 UTF-8 编码保存它?简而言之,您是否尝试对 csv 本身进行编码?

查看 this link 的 UTF-8 部分以获取更多信息。

最佳,