【问题标题】:Export to csv with BOM, Strange space begining of document that makes trouble使用 BOM 导出到 csv,文档的奇怪空格开头会造成麻烦
【发布时间】: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


【解决方案1】:

基于此answer,我发现我在文件" <?php" 的开头有一个空格,出于某种原因,它包含在文档中,如果有人可以向我解释为什么包含它,我将不胜感激。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 2012-03-11
    • 1970-01-01
    • 2012-08-23
    • 2016-07-16
    相关资源
    最近更新 更多