header('content-type:text/html;charset=UTF-8');
$data='party.csv';
$fp=fopen($data,'r');
while($r=fgets($fp)){
//$t=join("','",explode(',',$r));
$t = join("','", explode(',', $r));
echo (iconv('gbk','utf-8',$t)).'<br>';
                 //下面这个SQL我应该怎么写呢,用iconvGBK转UTF8不成功
//$sql="insert into value(null,'(iconv('gbk','utf-8',$t))',$adduser,$addtime)<br>";
//echo $sql;
}1,我想问下,我head已经声明了UTF8的编码,浏览器也是UTF8编码,但是还是乱码,然后我就用ICONV转换,但是如果放到SQL里面,iconv应该怎么办,直接用是不可以的,2,然后用上面的读取出来的,第一个字符串,少量一个 ' 单引号,应该是一对的,后面的都有,很奇怪,我的CSV结构是这样的但是读取出来以后,第一个字段少了一个’单引号,为什么会少一个单引号呢,我自己已经查了,没找到原因,

解决方案 »

  1.   

    因为你用的是
    $t = join("','", explode(',', $r));
    第一二字段间就这样,但第一字段前不需要加入这个连接串,所以造成最前面少了个引号乱码是你没搞清文件的编码,因为你显示出来是正确的,我也没法判断
    1.注意源文件编码
    2.注意有没有bom头
    3.windows下用"rb"打开比较好
      

  2.   

    1、php 提供了 fgetcsv 函数,不需要你读出后自己拆分成数组
    2、如果读出的数据是 gbk 的,那么在插入前执行一次 set names gbk 指令即可(假定你是mysql数据库)