尝试在 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 部分以获取更多信息。
最佳,
在我的 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 部分以获取更多信息。
最佳,