PHP 导入带有变音符号的 CSV

标签 php csv character-encoding

我有一个网站,我的用户可以在其中上传文件。该文件包含一些德语变音符号(如 ö 和 ä),并且采用 latin_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 会跳过包含变音符号的每一行。

我能做什么?

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

最佳答案

首先,不要将用户上传的数据直接传递到数据库!请使用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 文档以获取更多示例。

关于PHP 导入带有变音符号的 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46788584/

相关文章:

php - 如何使用日文字符管理数据库中的 ID

encoding - 没有特定字符集的默认DICOM编码

javascript - 使用 Firefox 发送的 POST 请求中的字符编码问题

php - 在 Wordpress 中有条件地打印 css 样式

python - 保留LDA pca的csv特征标签

c# - 在 CSV 文件中编写 C# 对象列表

MySQL:如何显示以逗号分隔的 1 列中的数据?

php - 直接在浏览器中使用 jquery/flash 从网络摄像头录制视频?

php - 将 codeigniter 站点集成为 wordpress 插件

javascript - 标题在页面加载之前重定向,但仍然运行 SQL