试图在laravel中保存utf-8的问题

时间:2015-02-18 21:17:39

标签: php csv laravel laravel-4 utf-8

在我的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字符(通过表单输入),则所有内容都会正确存储在users表中。但是,如果我在第二个函数中使用utf-8字符(通过csv),字段将无法正确存储并在第一个特殊字符处被截断(例如:“Michæl”存储为“Mich”)。

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

1 个答案:

答案 0 :(得分:1)

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

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

最好,