fputcsv()
是PHP中一个内置函数,用于将数组格式化为CSV行并将其写入文件指针。它的基本语法是:
fputcsv(resource $handle, array $fields, string $delimiter = ",", string $enclosure = '"', string $escape_char = "\\"): int|false
当使用fputcsv()
时,有时会在输出文件中出现额外的字符或空行,这通常由以下几个原因导致:
UTF-8编码的文件可能会包含BOM(Byte Order Mark)头,导致CSV文件开头出现额外字符。
解决方案:
$fp = fopen('file.csv', 'w');
// 写入BOM头(可选,根据需求)
fwrite($fp, "\xEF\xBB\xBF");
// 然后使用fputcsv写入数据
fputcsv($fp, $data);
fclose($fp);
使用错误的文件打开模式可能导致额外字符。
正确做法:
// 使用'w'模式会清空文件内容
$fp = fopen('file.csv', 'w');
// 或者使用'a'模式追加内容
$fp = fopen('file.csv', 'a');
不同操作系统换行符不同可能导致额外空行。
解决方案:
// 统一使用LF换行符
ini_set('auto_detect_line_endings', true);
$fp = fopen('file.csv', 'w');
// 或者在fputcsv后手动处理换行符
fputcsv($fp, $data);
fwrite($fp, "\n"); // 或 "\r\n" 根据需求
如果数组元素包含分隔符或引号,可能导致额外字符被插入。
解决方案:
// 自定义分隔符和包围符
fputcsv($fp, $data, ';', "'", "\\");
输出缓冲可能导致额外内容被写入文件。
解决方案:
ob_start();
// ...你的代码...
$csvData = ob_get_clean();
file_put_contents('file.csv', $csvData);
// 安全写入CSV文件的示例
function writeCSV($filename, $data) {
$fp = fopen($filename, 'w');
// 可选:写入BOM头
fwrite($fp, "\xEF\xBB\xBF");
foreach ($data as $row) {
if (fputcsv($fp, $row) === false) {
fclose($fp);
return false;
}
}
fclose($fp);
return true;
}
// 使用示例
$data = [
['Name', 'Email', 'Phone'],
['John Doe', 'john@example.com', '123456789'],
['Jane Smith', 'jane@example.com', '987654321']
];
writeCSV('contacts.csv', $data);
fputcsv()
常用于:
通过正确处理文件打开模式、编码和换行符问题,可以避免fputcsv()
插入额外字符的问题。
没有搜到相关的文章