问题来了 我想将我的数据转换为 csv 格式并下载。一切都很好,直到我下载的 csv 文件出现了一个小错误,文件的第一行有一个空格。
例如
强制下载前
“姓名”,“年龄”,
“布拉德·皮特”,“40”,`
强制下载后
“姓名”,“年龄”,
“布拉德·皮特”,“40”,
我下载并尝试用 Excel 打开的 csv 文件将如下所示
“姓名”|年龄
布拉德坑|40
我相信这是因为我下载的csv文件在数据的第一行出现了外部空格线。
这是代码
//写入csv数据 $data = $this->dbutil->csv_from_result($query, $delimiter); //创建随机文件名 $name = rand().'_salesperson_data_'.date('d-m-y').'.csv'; if ( ! write_file('./csv/'.$name, $data)) { echo '无法写入 CSV 文件'; } 别的 { //执行下载 $file = file_get_contents("./csv/".$name); // 读取文件内容 $filename = 'salesperson_data_'.date('d-m-y').'.csv'; Force_download($文件名, $文件); }
force_download()的来源
if(!function_exists('force_download')) { 函数force_download($filename = '', $data = '') { if ($文件名 == '' 或 $数据 == '') { 返回假; } // 尝试确定文件名是否包含文件扩展名。 // 我们需要它来设置 MIME 类型 if (FALSE === strpos($文件名, '.')) { 返回假; } // 获取文件扩展名 $x = 爆炸('.', $文件名); $扩展名=结束($x); // 加载 mime 类型 @include(APPPATH.'config/mimes'.EXT); // 如果我们找不到它,则设置一个默认的 mime if ( !isset($mimes[$extension])) { $mime = '应用程序/八位字节流'; } 别的 { $mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension]; } // 生成服务器头 if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { header('内容类型:"'.$mime.'"'); header('内容处置:附件; filename="'.$filename.'"'); header('过期时间:0'); header('Cache-Control: 必须重新验证,后检查=0,预检查=0'); header("内容传输编码:二进制"); 标头('杂注:公共'); header("内容长度:".strlen($data)); } 别的 { header('内容类型:"'.$mime.'"'); header('内容处置:附件; filename="'.$filename.'"'); header("内容传输编码:二进制"); header('过期时间:0'); header('Pragma: no-cache'); header("内容长度:".strlen($data)); } 退出($数据); } }
我认为 TRIM 将是我的最后一个解决方案,我尝试在可能的地方放置任何内容,但仍然是一样的。我找不到这个问题的任何解决方案。请帮忙。这已经困扰我两天了。
提前致谢。
我不知道是否需要仅使用 CSV,但我使用的一个很好的插件/功能是这个:http://codeigniter.com/wiki/Excel_Plugin/
它与 CodeIgniter 查询系统配合使用,将内容导出到 Excel。我经常使用它,从来没有遇到过问题。
尝试在浏览器上打印,如果您看到一些多余的空间,请删除。
如果您下载时 csv 文件中仍存在额外空间,则该额外空间来自您的任何包含文件。
当您开始编写代码时,尽量不要在代码的顶部/底部留出一些空间。
在写入 CSV 之前使用
ob_clean();
删除空格。