在我的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);
,情况也是如此。因此,如果第一个函数能够正确保存到数据库,我很困惑为什么第二个函数不是?
答案 0 :(得分:1)