$schools = School::all();
$string = "学校名称,地址,联系人,电话,创建时间\n";
foreach ($schools as $db) {
$ips = explode(',', $db->ip);
$ipCities = explode(',', $db->ip_city);
$string .= vsprintf("%s,%s,%s,%s,%s\n", [
$db->name,
$db->address,
$db->contact,
$db->mobile,
$db->created_at,
]);
}
$filename = '报表'.csv';//这里可以还可以导出别的后缀的文件,我们只要修改后缀就行了比如(.txt,.csv)
header('Content-Type: '."application/octet-stream; charset=gb2312");
header("Content-Disposition: attachment; filename= " . $filename);
echo mb_convert_encoding($string, 'gb2312');
解释:
1.vsprintf() 中的 arg 参数位于数组中。数组的元素会被插入主字符串的百分比 (%) 符号处。该函数是逐步执行的。在第一个 % 符号中,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。
2.header('Content-Type: '."application/octet-stream; charset=gb2312");//这个是代表二进制流,不知道是什么类型的下载文件.
3.header("Content-Disposition: attachment; filename= " . $filename); //这个是代表设置指定名字的下载文件.
4.
mb_convert_encoding($string, 'gb2312') mb_convert_encoding( $str, $encoding1,$encoding2 )
$str,要转换编码的字符串
$encoding1,目标编码,如utf-8,gbk,大小写均可
$encoding2,原编码,如utf-8,gbk,大小写均可