导出为带 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 出于某种原因它被包含在文档中 如果有人可以向我解释为什么包含它。