PHP导入CSV与变音符号

问题描述:

我有一个网站,我的用户可以上传一个文件。该文件包含一些德语元音变音(如ö和ä),并且是latin_1编码。现在我需要将这个文件转换为UTF-8,因为这个字符集被我的数据库使用。PHP导入CSV与变音符号

我使用下面的代码:

 $csvFile = fopen($_FILES['file']['tmp_name'], 'r'); 
     //parse data from csv file line by line 
     while(($line = fgetcsv($csvFile, 0, "\t")) !== FALSE){ 
       $dbupload->query("INSERT INTO db (a, b, c) 
          VALUES ('".$line[0]."', '".$line[3]."', '".$line[1]."')"); 
      } 
     } 

     //close opened csv file 
     fclose($csvFile); 

如果我用这个代码,并导入LATIN_1文件,PHP跳过含有元音每一行。

我该怎么办?

PS:该文件直接从前端(用户使用的页面)传递到处理该文件的文件。

+0

utf-8是你的朋友 –

+0

只需打开CSV文件,并将其保存为UTF-8编码。 – delboy1978uk

首先,不要将用户上传的数据直接传递到数据库!请使用pdo statements代替。

还要确保你在文件中有哪些编码。在例如我使用ISO-8859-1,但我可以想念你。

下面是使用iconv我的代码的一部分:

$csvFile = fopen($_FILES['file']['tmp_name'], 'r'); 

//parse data from csv file line by line 
while(($line = fgetcsv($csvFile, 0, "\t")) !== false) { 
    foreach ($line as $key => $value) { 
     $line[$key] = iconv('ISO-8859-1', 'UTF-8', $value); //but be sure in your charset name 
    } 
    //do not pass data from user upload directly to database! 
    //use pdo or addslashes at least 
    $dbupload->query("INSERT INTO db (a, b, c) VALUES ('".addslashes($line[0])."', '".addslashes($line[3])."', '".addslashes($line[1])."')"); 
} 

//close opened csv file 
fclose($csvFile); 

请参阅更多的例子的iconv文档。

如果您检查此列表here,您会看到包含Umlaute,其中提到,它们可以被解码和解码。 正如前面提到的那样,使用UTF-8编码保存文件会起到一定作用。否则,文件不会自动执行,这就是您遇到问题的原因。