2017-10-17 58 views
0

我有一個網站,我的用戶可以上傳一個文件。該文件包含一些德語元音變音(如ö和ä),並且是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

回答

1

首先,不要將用戶上傳的數據直接傳遞到數據庫!請使用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文檔。

0

如果您檢查此列表here,您會看到包含Umlaute,其中提到,它們可以被解碼和解碼。 正如前面提到的那樣,使用UTF-8編碼保存文件會起到一定作用。否則,文件不會自動執行,這就是您遇到問題的原因。