【发布时间】:2017-02-23 04:28:40
【问题描述】:
为了让 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 是一个空格,但导致该空格的原因,以及为什么它位于文档的开头是我无法弄清楚的。
【问题讨论】:
-
尝试添加第四个字节。
标签: php csv utf-8 export byte-order-mark