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';
即可解決