📜  fgetcsv utf8_encode (1)

📅  最后修改于: 2023-12-03 15:30:45.445000             🧑  作者: Mango

使用 fgetcsv 和 utf8_encode 进行 CSV 文件读取和转码

简介

在处理 CSV 文件时,经常需要使用到读取和转码的功能。PHP 中提供了 fgetcsv 函数用于读取 CSV 文件,而 utf8_encode 函数可以将非 UTF-8 编码的字符串转换为 UTF-8 编码。本文将介绍如何使用 fgetcsv 和 utf8_encode 进行 CSV 文件读取和转码。

函数说明
fgetcsv
array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]]] )
  • $handle:文件资源指针(使用 fopen 打开文件时返回的)
  • $length:一次读取的最大字节数,默认为 0(读取整行)
  • $delimiter:字段分隔符,默认为逗号(,)
  • $enclosure:字段引用符,默认为双引号(")
  • $escape:转义符,默认为反斜杠(\)

fgetcsv 函数用于从 CSV 文件中读取一行数据并解析为数组。如果设置了 $length 参数,则读取的字节数不超过 $length,如果读取到行末仍未满足长度要求,则读取整行。

utf8_encode
string utf8_encode ( string $data )
  • $data:待转换的字符串

utf8_encode 函数用于将某些非 UTF-8 编码的字符串转换成 UTF-8 编码。如果字符串已经是 UTF-8 编码,则不做处理。

使用示例
读取 CSV 文件并转码
$file = fopen('example.csv', 'r');
while (($row = fgetcsv($file)) !== false) {
    for ($i=0; $i<count($row); $i++) {
        $row[$i] = utf8_encode($row[$i]);
    }
    // 处理数组 $row
}
fclose($file);

在打开 CSV 文件后,使用 fgetcsv 函数将每一行读取并解析为数组。使用 for 循环遍历数组,将每个元素转换为 UTF-8 编码。

读取 CSV 文件并判断字符集
$file = fopen('example.csv', 'r');
while (($row = fgetcsv($file)) !== false) {
    $encoding = mb_detect_encoding($row[0], 'UTF-8, GB2312, GBK, BIG5, ASCII');
    if ($encoding !== 'UTF-8') {
        for ($i=0; $i<count($row); $i++) {
            $row[$i] = iconv($encoding, 'UTF-8//IGNORE', $row[$i]);
        }
    }
    // 处理数组 $row
}
fclose($file);

在读取每一行时,使用 mb_detect_encoding 函数判断该行的字符集。如果字符集不是 UTF-8,则使用 iconv 函数将其转换成 UTF-8 编码。转换时,如果出现了无法转换的字符,则忽略之。

总结

使用 fgetcsv 和 utf8_encode 进行 CSV 文件的读取和转码非常方便。需要注意的是,当处理 CSV 文件时,需要注意字符集的问题,以避免出现乱码等问题。