【问题标题】:fputcsv inserting empty row in beginning of .csvfputcsv 在 .csv 的开头插入空行
【发布时间】:2013-05-17 13:54:31
【问题描述】:
<?php

$filename="backup_".date('m/d/Y', time()).".csv";

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');

$q=mysqli_query($conn,"SELECT * FROM visitordb");
$file = fopen('php://output','w');
if(mysqli_num_rows($q)>0) {
    while($res = $q->fetch_assoc()) {
        $datas = $res["sno"].','.$res["UDID"].','.$res["taggnumber"].','.$res["name"].','.$res["designation"].','.$res["company"].','.$res["email"];
        fputcsv($file, explode(',', $datas));
    }
} else {

}

fclose($file);
}

以上代码在 ms excel 中查看时会在 .csv 文件的开头生成空行。 .csv 文件还会在页面中生成任何 html 代码。

【问题讨论】:

  • 确保脚本没有其他输出,关闭$file后退出
  • 不要依赖 Excel 来告诉您 CSV 的样子。 .csv 是什么样的?!
  • 尝试简单地将文件保存到磁盘,看看开头是否有空行。
  • 另外,你能解释一下你问题中的最后一句话吗?那篇关于 HTML
  • 谢谢大家.. 是的,我已经尝试了建议仍然没有改变.. csv 开头有一个空行.. HTML 表示 标记等..

标签: php fputcsv


【解决方案1】:

如果您删除标头指令会发生什么? 您必须知道,根据定义,标题由新行结束。 我可以想象这是一个 \n vs \r\n 冲突。

如果一切都失败了,将整个输出放入缓冲区并稍后修剪:

ob_start();
...your code...
$out = ob_get_contents();
ob_end_clean();
echo trim($out);

最好的问候

Zsolt

【讨论】:

  • 不客气。请注意,修剪也会删除尾随空格。如果您需要保持 csv 100 % 安全,请使用其他字符串操作。
  • @Zsolt Szilagy köszönöm。我有同样的问题,不知道标题指令正在添加一个新行。就我而言,我将输出写入一个临时文件(php 的 tmpfile()),所以我只需要执行 ob_end_clean();在遍历我的文件并回显它之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 2019-01-31
  • 2018-08-30
相关资源
最近更新 更多