PHP用fopen打开csv文件fgetcsv读取中文乱码解决思路
一般情况下,我们php编码都是utf-8,但是程序读取csv的时候,经常出现中文乱码。
网上出现了很多方法,其实大部分都是天下文章一起抄,有没有试过不知道,反正我试了大半天。
第一种:用iconv函数转换的。
$fh=fopen("upload/loaddatatest.csv","r");
while ($line=fgetcsv($fh,1000,",")){
$Name=$line[0];
$Name=iconv('gb2312','utf-8',$line[0]); //涉及中文的才要转换,乾元轩注,或者配合iconv(‘GBK',”UTF-8//TRANSLIT//IGNORE”,$str);
echo $Name;
$Age=$line[1];
$Phone=$line[2];
$query="INSERT INTO one (name,age,phone) VALUES ('$Name','$Age','$Phone')";
mysql_query($query,$con);
}我测试,结果失败。
继续找方案,
第二种:
header("Content-Type: application/force-download");
header("Content-type:text/csv;charset=gb2312");
header("Content-Disposition:filename=打开邮件导出".date("YmdHis").".csv");
echo chr(0xEF).chr(0xBB).chr(0xBF); //直接字符转换
echo "收件人邮箱,收件人姓名,发送时间\r";
ob_end_flush();
foreach($list as $rs)
{
echo $rs->toemail.",".$rs->name.",".date('Y-m-d H:i:s',$rs->addtime)."\r";
flush();
}
exit;我测试,还是失败。
第三种方案:
去修改php.ini文件的编码,放弃。
第四种方案:
<?php *//读取csv文件的代码略,可见第一种方法的代码片段 $output = mb_convert_encoding($mycsvfile[$trow][10], "UTF-8", "GBK"); echo $output; ?>
读取文件后,用mb_convert_encoding函数解决。这个方法对我的问题有效。
可能方法都是有效的,不过看具体情况。总之就是要转码,科学转码,合理上网。

