<?php
header("Content-type:text/html;charset=utf-8");
/**
CSV文件是以纯文本形式存储的,一般以逗号为分隔符。
这里主要简单介绍下如何导出CSV文件。
**/
//一、浏览器导出CSV文件格式
/**
* 导出CSV文件
*/
function exportCsv(){
// 需要导出的内容
$data = [
['name' => '张三', 'score' => '80'],
['name' => '李四', 'score' => '90'],
['name' => '王五', 'score' => '60'],
];
// 文件名,这里都要将utf-8编码转为gbk,要不可能出现乱码现象
$filename = utfToGbk('导出csv文件.csv');
// 拼接文件信息,这里注意两点
// 1、字段与字段之间用逗号分隔开
// 2、行与行之间需要换行符
$fileData = utfToGbk('姓名, 分数') . "\n";
foreach ($data as $value) {
$temp = $value['name'] . ',' .
$value['score'];
$fileData .= utfToGbk($temp) . "\n";
}
// 头信息设置
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 $fileData;
exit;
}
//二、在服务器生成CSV文件
/**
* 下载CSV文件
*/
function downLoadCsv(){
// 需要导出的内容
$data = [
['name' => '张三', 'score' => '80'],
['name' => '李四', 'score' => '90'],
['name' => '王五', 'score' => '60'],
];
// 文件名,这里都要将utf-8编码转为gbk,要不可能出现乱码现象
$filename = utfToGbk('生成csv文件.csv');
// 拼接文件信息,这里注意两点
// 1、字段与字段之间用逗号分隔开
// 2、行与行之间需要换行符
$fileData = utfToGbk('姓名, 分数') . "\n";
foreach ($data as $value) {
$temp = $value['name'] . ',' .
$value['score'];
$fileData .= utfToGbk($temp) . "\n";
}
$filePath = __DIR__ . '/' . $filename;
// 将一个字符串写入文件
file_put_contents($filePath, $fileData);
return $filePath;
}
/**
* 字符转换(utf-8 => GBK)
*/
function utfToGbk($data)
{
return iconv('utf-8', 'GBK', $data);
}
/**
* 数组打印
*/
function p($data)
{
echo '<pre>';
print_r($data);
}
//csv文件数据导入到数据库
function import(){
ini_set('memory_limit', '-1'); //PHP内存设置
$handle=fopen("test.csv","r");
$fileName="test.csv";
//将文件一次性全部读出来
$excelData = array();
$content = trim(file_get_contents($fileName));
$excelData = explode("\n",$content);
$chunkData = array_chunk($excelData , 500); //批量插入500条数据
$count = count($chunkData);
for ($i = 0; $i < $count; $i++) {
$insertRows = array();
foreach($chunkData[$i] as $value){
$string = mb_convert_encoding(trim(strip_tags($value)), 'utf-8', 'GBK');//转码
$v = explode(',', trim($string));
$v = str_replace("'", " ", $v);
$v = str_replace(" ", "", $v);
$sqlString = '('."'".implode( "','", $v ) . "'".')'; //批量
$insertRows[] = $sqlString;
}
p($insertRows);die;
}
}
import();
/**
备注:
php导入csv文件碰到乱码问题的解决方法
问题一解决: 在windows上写代码的时候测试发生了乱码问题
方法一:函数mb_convert_encoding();作如下设置 $str = mb_convert_encoding($str, "UTF-8", "GBK");然后就可以了。
方法二:函数iconv();作如下设置iconv(‘GBK',”UTF-8//TRANSLIT//IGNORE”,$str);
这两个函数来解决在windows上面发生乱码的问题。
问题二解决: 提交到linux系统上的时候又发生了乱码
php读取csv文件,在linux上出现中文读取不到的情况,解决办法
添加了一行代码setlocale(LC_ALL, 'zh_CN');
PHP setlocale() 函数解释
setlocale() 函数设置地区信息(地域信息)。
地区信息是针对一个地理区域的语言、货币、时间以及其他信息。该函数返回当前的地区设置,若失败则返回 false。
问题三:如果导出的文件中包含 逗号
str_replace (',',',',str_replace(PHP_EOL,'',$val))
**/
?>
网友评论