📅  最后修改于: 2023-12-03 15:30:45.445000             🧑  作者: Mango
在处理 CSV 文件时,经常需要使用到读取和转码的功能。PHP 中提供了 fgetcsv 函数用于读取 CSV 文件,而 utf8_encode 函数可以将非 UTF-8 编码的字符串转换为 UTF-8 编码。本文将介绍如何使用 fgetcsv 和 utf8_encode 进行 CSV 文件读取和转码。
array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]]] )
$handle
:文件资源指针(使用 fopen 打开文件时返回的)$length
:一次读取的最大字节数,默认为 0(读取整行)$delimiter
:字段分隔符,默认为逗号(,)$enclosure
:字段引用符,默认为双引号(")$escape
:转义符,默认为反斜杠(\)fgetcsv 函数用于从 CSV 文件中读取一行数据并解析为数组。如果设置了 $length
参数,则读取的字节数不超过 $length
,如果读取到行末仍未满足长度要求,则读取整行。
string utf8_encode ( string $data )
$data
:待转换的字符串utf8_encode 函数用于将某些非 UTF-8 编码的字符串转换成 UTF-8 编码。如果字符串已经是 UTF-8 编码,则不做处理。
$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 编码。
$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 文件时,需要注意字符集的问题,以避免出现乱码等问题。