php下载csv
‘壹’ php 生成csv文件并提示保存
<?php
//文件名
$filename="test.csv";
//数据(具体的根据需要做处理,如果是从数据库查询,原理与此类似,只需设置好写入格式和数据即可。
$data="测试csv";
//设置header
header("Content-type:text/csv");
header("Content-Disposition:attachment;filename=".$filename);
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Expires:0');header('Pragma:public');
echo$data;
?>
‘贰’ 求源码!PHP导出数据到csv文件
<?php
$DB_Server = "localhost";
$DB_Username = "root";
$DB_Password = "";
$DB_DBName = "DBName";
$DB_TBLName = "DB_TBLName";
$savename = date("YmjHis");
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Couldn't connect.");
mysql_query("Set Names 'gbk'");
$file_type = "vnd.ms-excel";
$file_ending = "xls";
header("Content-Type: application/$file_type;charset=gbk");
header("Content-Disposition: attachment; filename=".$savename.".$file_ending");
//header("Pragma: no-cache");
$now_date = date("Y-m-j H:i:s");
//$title = "数据库名:$DB_DBName,数据表:$DB_TBLName,备份日期:$now_date";
$sql = "Select * from $DB_TBLName";
$ALT_Db = @mysql_select_db($DB_DBName, $Connect) or die("Couldn't select database");
$result = @mysql_query($sql,$Connect) or die(mysql_error());
//echo("$title\n");
$sep = "\t";
for ($i = 0; $i < mysql_num_fields($result); $i++) {
echo mysql_field_name($result,$i) . "\t";
}
print("\n");
$i = 0;
while($row = mysql_fetch_row($result)) {
$schema_insert = "";
for($j=0; $j<mysql_num_fields($result);$j++) {
if(!isset($row[$j]))
$schema_insert .= "NULL".$sep;
elseif ($row[$j] != "")
$schema_insert .= "$row[$j]".$sep;
else
$schema_insert .= "".$sep;
}
$schema_insert = str_replace($sep."$", "", $schema_insert);
$schema_insert .= "\t";
print(trim($schema_insert));
print "\n";
$i++;
}
return (true);
?>
‘叁’ PHP怎么在导出csv的时候加双引号
使用默认的双引号做包围符 ... 但是强制所有元素触发 ...
foreach($linesas&$line){
foreach($lineas&$column){
$column=$column.'';
}
}
产生的结果大概会类似于下面这样 ...
"CA","12","Y"
"MU","13","Y"
"MU","12","N"
2.我们去研究手册 ... 手册上关于这个函数的说明是这样的 ...
intfputcsv(resource$handle,array$fields[,string$delimiter=','[,string$enclosure='"']])
你可以看到这个函数支持自定义包围符 ... 也就是第四个参数 $enclosure ...
于是我们可以手动在所有元素的两侧加上双引号 ... 并修改默认的包围符为空 ...
foreach($old['lines']as$line){
fputcsv($new,$line,',','');
}
这种方式可以让你的例子返回完美的结果 ...
以上是两种方法。
‘肆’ php导出csv文件时,只能在浏览器上显示文件内容,没有下载提示,更没有下载的csv文件,帮忙指点啊!
据我的理解,export_csv这个函数的功能就是显示csv内容。
按照你的说明猜测,你应该是先将数据库的内容输出到csv文件里,然后再给出一个指向该文件的下载链接就可以了。
export_csv这个函数可以设计成直接用 file 操作函数写入内容就可以了,因为csv本身是纯文本文件,没有什么特殊的文件格式。
‘伍’ PHP导出CSV格式文件因为导出数据中有英文逗号导致分列错误怎么处理
CSV文件的格式本身就是以英文逗号分列,然后回车分行的文本类型!所以,你的问题,如果某一列中包含英文逗号的话将这一列用引号引起来!比如:
a,"b,c",d
这样就会是三列,而不是四列
‘陆’ utf8编码的php导出CSV乱码怎么解决
解决乱码的方法:首先使用iconv函数将utf8编码转码为GBK,语法为“$str = iconv('utf-8' 'GBK//IGNORE' $str));”。其次,在输出内容前先输出BOM头,这样Excel可自动识别到是UTF-8。其实需求是将数据导出到Excel,PHPExcel库虽然强大,但在内存使用上较为昂贵,对于超过10万的数据处理在web请求中较为困难。因此,使用原生PHP导出轻量的csv仍然是有需求的。
通常情况下,将UTF-8编码的内容导出到csv中,使用Excel打开会显示乱码,尤其是非主流字符或emoji表情。这是因为windows系统默认的Excel使用GBK编码解析。现今,编码通常都是使用UTF-8,除非是大公司知名产品为了节省流量而出有GBK等其他编码的版本。
解决乱码问题,通常使用PHP中的iconv函数进行转码为GBK,这样默认的Excel打开就不会有问题。但对于emoji表情等主流字符,GBK并不能显示,转码失败直接为空。可以添加//IGNORE标记进行忽略,这样只是忽略了它们,其他正常字符仍然能保留。
$str = iconv('utf-8' 'GBK//IGNORE' $str));
这可以说是一种折中方案。能否不转码直接输出UTF-8?Excel是否能自动识别UTF-8并使用UTF-8来解码显示?答案是可以的,只是需要一个BOM头(非windows系统中没有这个东西),有BOM头它就能识别到是UTF-8,否则会用默认的GBK处理,导致乱码。正确的输出BOM头如下:
$fp = fopen('/test_csv.csv' 'a');fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF)); //输出BOM头fputcsv($fp, ['标题']);fputcsv($fp, ['解决乱码']);fclose($fp);
以上测试结果证实,这种方法可以解决乱码问题,并正常显示emoji表情等非主流字符。