php fputcsv 输出 csv 文件中文乱码问题解决
以下为使用的 csv 格式输出代码:
set_time_limit(0);
header('Content-Language: zh');
header('Content-Type: application/vnd.ms-execl; charset=utf-8');
header('Content-Disposition: attachment;filename="' . $file . '.csv"');
$fp = fopen('php://output', 'a');
foreach ($result as $row) {
fputcsv($fp, get_object_vars($row));
}
ob_flush();
flush();
发现输出的文件中文出现乱码,检查代码文件格式为 utf-8 ,数据库字符集也为 utf-8。
有一文章中介绍,在输出 csv 文件内容之前,输出 utf-8 BOM 就可以修复:
fwrite($fp, "\xEF\xBB\xBF");
测试输出,中文乱码问题解决。
完整输出示例:
set_time_limit(0);
header('Content-Language: zh');
header('Content-Type: application/vnd.ms-execl; charset=utf-8');
header('Content-Disposition: attachment;filename="' . $file . '.csv"');
$fp = fopen('php://output', 'a');
fwrite($fp, "\xEF\xBB\xBF");
foreach ($result as $row) {
fputcsv($fp, get_object_vars($row));
}
ob_flush();
flush();
对于使用 file_put_contents
的示例:
$bom = pack('CCC', 0xef, 0xbb, 0xbf); // 和上面的对应
file_put_contents('pythontab.csv',$bom, FILE_APPEND);
file_put_contents('pythontab.csv',$someData, FILE_APPEND); //写入你想要写入表格的数据