2017-10-17 14 views
0

私は自分のユーザーがファイルをアップロードできるWebサイトを持っています。このファイルにはドイツ語のウムラウト(öとä)が含まれており、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を持っているが、私はあなたを勘違いすることができます。

$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のドキュメントを参照してください:ここでは

iconvを使用して、私のコードの一部です。

0

このリストhereをチェックすると、Umlauteが含まれていることがわかります。これは、言い換えると、エンコードとデコードが可能です。 前述のとおり、ファイルをUTF-8エンコーディングで保存すると、そのトリックが実行されます。そうしないと、ファイルが自動的に処理されないため、問題が発生します。

関連する問題