使用umlauts导入PHP CSV

使用umlauts导入PHP CSV,php,csv,character-encoding,Php,Csv,Character Encoding,我有一个网站,我的用户可以上传文件。该文件包含一些德语umlauts(asöandä),并采用拉丁字母1编码。现在我需要将这个文件转换为UTF-8,因为我的数据库使用这个字符集 我使用以下代码: $csvFile = fopen($_FILES['file']['tmp_name'], 'r'); //parse data from csv file line by line while(($line = fgetcsv($csvFile, 0,

我有一个网站,我的用户可以上传文件。该文件包含一些德语umlauts(asöandä),并采用拉丁字母1编码。现在我需要将这个文件转换为UTF-8,因为我的数据库使用这个字符集

我使用以下代码:

        $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将跳过包含umlaut的每一行

我能做什么

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

如果您选中此列表,您将看到其中包括die Umlaute,其中提到,可以对其进行加密和解码。
如前所述,使用UTF-8编码保存文件即可。否则文件不会自动执行,这就是问题所在。

首先,不要将用户上传的数据直接传递到数据库!请改用

还要确保文件中有哪种编码。在这个例子中,我有用法,但我不能理解你

以下是我的代码的一部分,使用:


有关更多示例,请参阅iconv文档。

utf-8是您的朋友,只需打开CSV,并以utf-8编码保存即可。
$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);