导出为带 BOM 的 csv,奇怪的 space 文件开头,造成麻烦
Export to csv with BOM, Strange space begining of document that makes trouble
为了 excel 正确读取 csv 文档而不将其转换为 ASCII 字符,您需要在文件开头使用 UTF-8 BOM(3 字节,十六进制 EF BB BF)。
这是我用来导出到 csv 的函数
function download_csv_results($results, $name)
{
header('Content-Type: text/csv; charset=utf-8');
header("Content-Transfer-Encoding: UTF-8");
header('Content-Disposition: attachment; filename='. $name);
header('Pragma: no-cache');
header("Expires: 0");
$outstream = fopen("php://output", "w");
fwrite($outstream, "\xEF\xBB\xBF");
fputcsv($outstream, array_keys($results[0]));
foreach($results as $result)
{
fputcsv($outstream, $result);
}
fclose($outstream);
}
问题是当我以十六进制查看它时我看到
20 ef bb bf
相对于
ef bb bf 20
我认为 20 是 space,但导致 space 的原因以及为什么它位于文档开头是我无法弄清楚的。
基于此 answer 我发现我在文件 " <?php"
的开头有一个 space 出于某种原因它被包含在文档中 如果有人可以向我解释为什么包含它。
为了 excel 正确读取 csv 文档而不将其转换为 ASCII 字符,您需要在文件开头使用 UTF-8 BOM(3 字节,十六进制 EF BB BF)。
这是我用来导出到 csv 的函数
function download_csv_results($results, $name)
{
header('Content-Type: text/csv; charset=utf-8');
header("Content-Transfer-Encoding: UTF-8");
header('Content-Disposition: attachment; filename='. $name);
header('Pragma: no-cache');
header("Expires: 0");
$outstream = fopen("php://output", "w");
fwrite($outstream, "\xEF\xBB\xBF");
fputcsv($outstream, array_keys($results[0]));
foreach($results as $result)
{
fputcsv($outstream, $result);
}
fclose($outstream);
}
问题是当我以十六进制查看它时我看到
20 ef bb bf
相对于
ef bb bf 20
我认为 20 是 space,但导致 space 的原因以及为什么它位于文档开头是我无法弄清楚的。
基于此 answer 我发现我在文件 " <?php"
的开头有一个 space 出于某种原因它被包含在文档中 如果有人可以向我解释为什么包含它。