使用PHP从CSV导入的数据已破坏隐藏字符

时间:2015-11-03 11:59:48

标签: php mysql csv laravel csv-import

我使用Laravel Excel package将CSV文件导入我的应用程序,并尝试将其数据与我的数据库进行匹配。

目前的代码是:

Excel::load($file, function($reader) { //Load it into Excel package
    $reader->each(function($row) { //Loop through row by row

        $firstname = $row->forename;
        $surname = $row->surname;

        $firstname = str_replace('"', '', $firstname); //Remove the enclosure "
        $surname = str_replace('"', '', $surname);

        $client = DB::table('clients')->where('firstname', $firstname)->where('surname', $surname)->first();

        if ($client!=null) {
            print $client->id."<br><br><br>";
        } else {
            print "Fail<br><br><br>";
        }
    });
})->get();

即使我确定应该进行匹配,所有查询都会失败。运行一些查询调试来获取查询和绑定,我看到了这个(示例数据):

string 'select * from `clients` where `firstname` = ? and `surname` = ? limit 1' (length=71)

array (size=2)
  0 => string 'E�l�i�z�a�b�e�t�h' (length=17)
  1 => string '��W�e�s�s�o�n��' (length=15)

如您所见,从CSV中取出的所有字符串在每个字符后都有一个。。

我认为这可能是某种编码问题?我是否需要从CSV文件中转义或处理字符串才能像普通的PHP字符串一样使用它?

非常感谢你的帮助

1 个答案:

答案 0 :(得分:0)

请检查下面的代码,我在这里找到了相同的代码 http://www.maatwebsite.nl/laravel-excel/docs/import#extra 检查'输入编码'部分 希望这有帮助

// When utilising a closure, you can pass the input encoding as third parameter.
Excel::load('filename.csv', function($reader) {

}, 'UTF-8');