使用 php 自带的 fgetcsv 读取 csv 文件内容,出现乱码。这是因为 csv 文件内容格式不是 utf 的,所以在读取和写入数据库时就会出现乱码,可以用 iconv 函数转换解决。

修复后的 demo 如下(laravel 获取文件):

$file = Input::file('xls_file_name');
$fp = fopen($file->getRealPath(), 'r');
$shops = array();
$key_arr = ['name', 'pcd', 'address'];
while ($line = fgetcsv($fp)) {
    $line_data = array();
    $i = 0;
    foreach ($key_arr as $key) {
        $line_data[$key] = iconv('gb2312','utf-8', $line[$i]);
        $i++;
    }
    array_push($shops, $line_data);
    $line = fgetcsv($fp);
}
unset($shops[0]);