php读取csv数据 php写入csv

php读取csv文件怎么是乱码出现乱码解决办法:
csv格式不是utf的,所以在读取和写入mysql的时候就会出现乱码,用iconv函数转换下即可 。
$Name=iconv('gb2312','utf-8',$file);
php中如何导入导出CSV格式的文件php导入CSV文件:
$line_number = 0;
$handle = fopen("1.xls","r");
while ($data = https://www.04ip.com/post/fgetcsv ($handle, 100000,",")) {
if($line_number == 0){
$line_number++;
continue;
}
//z这样就可以去掉表头的那一行
for ($i = 0; $icount($data); $i++) {
$ziduan = $data[$i];
}
}
2.php导出CSV文件
header( "Cache-Control: public" );
header( "Pragma: public" );
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=txxx.csv");
header('Content-Type:APPLICATION/OCTET-STREAM');
ob_start();
$header_str =iconv("utf-8",'gbk',"信息id,标题,名称,电话,QQ,Email,内容,时间\n");
$file_str="";
$mysqli= new mysqli('localhost','root','','test');
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$sql='select *from messages';
$mysqli-query("set names utf8 ;");
$result=$mysqli-query($sql);
if($result){
while ($row = mysqli_fetch_assoc($result)){
$file_str.= $row['id'].','.$row['title'].','.$row['name'].','."'{$row['telephone']}'".','.$row['qq'].','.$row['email'].','.str_ireplace(',',',',$row['content']).','.$row['retime']."\n";
}
}else{
echo "nonono!!!";
}
$file_str=iconv("utf-8",'gbk',$file_str);
ob_end_clean();
echo $header_str;
echo $file_str;
?
如何读取csv文件的内容第一种方式: 先入库后使用我们假设现在有有一个CSV文件Contacts.CSV 文件php读取csv数据的内容是联系人信息 。首先我们需要在数据库中建一个对应php读取csv数据的表TC_Contacts,然后利用下面的SQL代码将CSV文件导入到这个表里面:INSERT INTO TC_Contacts23 SELECT * FROM4 OPENROWSET('MSDASQL',5 'Driver={Microsoft Text Driver (*.txt; *.csv)};6 DEFAULTDIR=D:\Data;Extensions=CSV;',7 'SELECT * FROM "Contacts.CSV"')其中:1.TC_Contacts为目标表的名字 。对于目标表 , 要求对应的字段能够接收CSV文件中对象列的数据 , 这里特别需要注意的是字符串的长度,日期时间格式和整数浮点数的处理;由于CSV文件中实际上都是字符串,那么在导入的过程中就有可能出现不能转换的情况 。例如php读取csv数据:日期格式不符合数据库的要求,或者字符串不能转化为整数或者浮点数等 。对于目标表,字段数目和顺序可以和CSV文件中的不一样 。其实在整个的SQL语句中只有OPENROWSET是用来处理CSV文件的 。其它部分都是普通的T-SQL,在T-SQL中能做的事情在这里都可以做 。例如:如果你的TC_Contacts比CSV多一个字段gid uniqueidentifier ,那么就可以把SQL语句修改为:1 INSERT INTO TC_Contacts2 SELECT newid(),* FROM3 OPENROWSET('MSDASQL',4 'Driver={Microsoft Text Driver (*.txt; *.csv)};5 DEFAULTDIR=D:\Data;Extensions=CSV;',6 'SELECT * FROM "Contacts.CSV"')这样就可以给每条记录增加一个id了 。2.SQL代码中的DefaultDir 也就是D:\Data 是指存在于SQL Server服务器上的位置,而不是在提交该代码的客户机上 。这一点对于初次接触的人来说很关键 。SQL Server如果在服务器上找不到文件会报告错误 。但是这个错误的消息不是那么直接了当 。3.有的CSV文件中第一行不是列标题,而是和其它行一样是普通的数据行 。这个时候就需要一个Schema.ini来定义CSV文件的格式 。Schema.ini的格式我会专门写一篇来介绍一下 。在Schema.ini文件中会指定CSV文件的一些特性,这样有助于Microsoft Text Driver来处理数据.第二种:直接使用通过OdbcConnection可以创建一个链接到csv文件的链接,链接字符串的格式是:"Driver={Microsoft Text Driver (*.txt;*.csv)};Dbq="+cvs文件的文件夹路径+" Extensions=asc,csv,tab,txt; Persist Security Info=False";创建连接之后就可以使用DataAdapter等存取csv文件了 。public DataSet getdatasetfromcsv(string filepath, string filename){string strconn = @"driver={microsoft text driver (*.txt; *.csv)};dbq=";strconn += filepath; //filepath, for example: c:\strconn += ";extensions=asc,csv,tab,txt;" ;OdbcConnection objconn = new OdbcConnection(strconn);DataSet dscsv = new DataSet();try{string strsql = "select * from " + filename; //filename, for example: 1.csvOdbcDataAdapter odbccsvdataadapter = new OdbcDataAdapter(strsql,objconn);

推荐阅读