【发布时间】:2015-02-18 21:17:39
【问题描述】:
在我的 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 表中。但是,如果我在第二个函数(通过 csv)中使用 utf-8 字符,则字段存储不正确并在第一个特殊字符处被截断(例如:“Michæl”存储为“Mich”)。
我认为这可能是 fgetscsv() 没有正确读取数据的问题,但是当我尝试对字段进行数据转储时(例如:dd($first_name);),输出的字符串是正确的,包含特殊字符。如果我尝试dd($user);,情况也是如此。所以如果第一个函数能够正确保存到数据库,我很困惑为什么第二个函数不能?
【问题讨论】:
-
您是否尝试在编辑器中打开您的 csv 文件并使用 UTF-8 编码保存它?简而言之,您是否尝试过对 csv 本身进行编码?
-
@SühaBoncukçu 使用 UTF-8 编码保存有效。对不起,如果这是一个愚蠢的问题,但为什么要解决它?非常感谢您的帮助。
-
我不认为这是一个愚蠢的问题,因为每个人都至少经历过一次。如果你在这里检查 UTF-8 部分,我想你会明白的:en.wikipedia.org/wiki/Byte_order_mark
-
酷我去看看。如果您愿意,请发表您的评论作为答案,我会接受。再次感谢!
-
为什么不呢?赞赏:)
标签: php csv laravel laravel-4 utf-8