1. php读取csv文件时 用phpexcel很慢 用fgetcsv()函数中文乱码 请问还有什么excel库或函数方法来读csv文件吗
php从csv文件读取数据并输出到网页的方法
<?php
$fp=fopen('sample.csv','r')ordie("can'topenfile");
print"<table> ";
while($csv_line=fgetcsv($fp)){
print'<tr>';
for($i=0,$j=count($csv_line);$i<$j;$i++){
print'<td>'.htmlentities($csv_line[$i]).'</td>';
}
print"</tr> ";
}
print'</table> ';
fclose($fp)ordie("can'tclosefile");
?>
你可以这样试一试的啊
2. php导入csv文件输出是乱码,怎么解决
//这是我前几天回答过的一个问题下面以读取淘宝csv文件为例
if($result){//如果上传成功了,这是文件路径
if(!($handle=fopen_utf8($result,"r"))===FALSE){//调取下边函数fopen_utf8;
$errorArr=array();
$i=0;
while(($cols=fgetcsv($handle,1000," "))!==FALSE){
++$i;
if($i<4)continue;
$taobaolmsx=$cols[21];//宝贝属性;
$taobaoxxsx=$cols[30];//销售属性;
$goodsBn=$cols[33];//商家编码;
}
fclose($handle);
}
unlink($result);
}else{
echo'fileuploaderror';exit;
}
/*读取csv文件用*/
functionfopen_utf8($filename){
$encoding='';
$handle=fopen($filename,'r');
$bom=fread($handle,2);
rewind($handle);
if($bom===chr(0xff).chr(0xfe)||$bom===chr(0xfe).chr(0xff)){
//UTF16ByteOrderMarkpresent
$encoding='UTF-16';
}else{
$file_sample=fread($handle,1000)+'e';//readfirst1000bytes
//+eisaworkaroundformb_stringbug
rewind($handle);
$encoding=mb_detect_encoding($file_sample,'UTF-8,UTF-7,ASCII,EUC-JP,SJIS,eucJP-win,SJIS-win,JIS,ISO-2022-JP');
}
if($encoding){
stream_filter_append($handle,'convert.iconv.'.$encoding.'/UTF-8');
}
return($handle);
}
3. PHP fgetcsv 循环出错
fgetcsv函数的作用是从文件指针中读入一行并解析CSV字段然后返回一个包含这些字段的数组.执行一次它就读入一行,所以print_r中再次使用fgetcsv($me)后,相当于while时读了两行了,所以你打印的就是每次的偶数行了.
//原代码:
while(($i=fgetcsv($me))!==false){//读一行
print_r(fgetcsv($me));//再读一行并打印出来
}
正确的当然是:
while(($i=fgetcsv($me))!==false){
print_r($i);//读一行就打印一行
}
4. phpexcel 读取csv大文件只读取显示A列
虽然有Excel操作类,不建议使用。php操作excel本来就很不地道,表格复杂点就出错,特别是在linux系统上就更麻烦了。
CSV是通用格式,你可以用excel另存为csv格式,再交给php处理。php有专门的fgetcsv()来读取csv中的数据。
5. php导入CSV到MYSQL遇到特殊字符的问题。
<?php//导入CSV表格:CSV转数组
$fp=fopen($_FILES['myfile']['tmp_name'],'r');
while(($row=fgetcsv($fp))!==FALSE){//从文件指针中读入一行并解析CSV
$arr[]=$row;}fclose($fp);//开启事务,循环插入
$link=mysqli_connect("127.0.0.1","root","root","zwxiaomi");
if(!$link){echo"<script>alert('数据库连接失败!')</script>";}
$link->query("SETNAMESUTF8");
foreach($arras$row){
$danhao=substr($row[2],1);
$sql="INSERTINTOzaitugongdan(FirstName,LastName,danhao)
VALUES('".$row[0]."','".$row[1]."','".$danhao."')";
$link->query($sql);
}
?>
在代码中去掉这个符号不就可以了
6. php解析csv时,特定汉字会导致逗号识别不出来
这个需要看下你具体实现的代码,因为特殊汉字导致分隔符“,”失效这种情况应该是没有的。
文档里面这个函数的用法是:
fgetcsv($handle,1000,",")
第一个参数是文件句柄,第二个参数是要截取的长度,第三个是分隔符。
你试一下把第二个参数的数字调大一些,看下是否还有问题。
7. 这个php代码读出来的csv文件,在网页上显示乱码!请高手指教啊
你的csv文件猜测是gbk的,在php输出时候,加输出<meta http-equiv="Content-Type" content="text/html; charset=GB2312"/>试试
8. PHP的fgetcsv读不了中文啊,网上查的iconv,setlocale都不管用
mb_convert_encoding
参数自己查手册 一定能转的
ps:乱码产生无非是字的编码跟采用的解码不统一引起
9. PHP里fgetcsv这个函数读出来是一个二维数组
//从手册里摘出来的.
while ($data = fgetcsv($handle, 1000, ",")) {
$num = count($data);
//行中某个字段是对象外的也不需要,看不懂这句.但我想既然是csv,那结构肯定是一定的.假定要判断第三个字段是否是对象外的.
if($data[2] == '对象外') continue;//我不知道你说的对象外怎么判断.你改成自己的判断条件.如果,则跳过.
$row++;
$info_list[] = $data;
}
=============
最后的数组包含了第一行.你可以直接unset($info_list[0]);然后
$info_list = array_values($info_list);重置一下数组下标.
10. php把excel导入到mysql中乱码
只要保持编码一致
就不会出现乱码。
excel导入到mysql过程:
excel编码-->程序编码-->数据库编码
具体的你可以参阅PHP相关手册或工具书中
编码-字符集
相关章节,进行正确的编码转换
即可
程序编码-->数据库编码
过程中
具体的方法一般在
连接数据库后执行SQL语句:
SET
NAMES
'utf8';
或
SET
NAMES
'gbk';
即可解决