php 输出csv时中文乱码的问题

今天在做微信支付批量退款,需要php 生成合格的csv文件,但是发现使用fputcsv输出的头部出现乱码,困扰了一阵,最后找到解决办法如下:

即:用 iconv(‘UTF-8′,’GBK’ , $v)转码。

最后奉上一个CI的直接生成下载csv文件的函数。

function putcsv($csv_header=false,$csv_body=false){
    $time=time();
    $CI =&get_instance();
    $CI->load->helper('download');
    foreach ( $csv_header as $i => $v ) {
        $csv_header [$i] = iconv('UTF-8','GBK' , $v);
    }
    $header = implode(',', $csv_header) . PHP_EOL;
    $content = '';
    foreach ($csv_body as $k => $v) {
        foreach ( $v as $ii => $vv ) {
            $v[$ii] = iconv('UTF-8', 'GBK', $vv);
        }
        $content .= implode(',', $v) . PHP_EOL;
    }

    $csv = $header.$content;
    header("Content-type: text/html; charset=utf-8");
    force_download($time.rand(100,999).'.csv', $csv);
}

另外附上一个基本示例

$list = array
(
"George,John,Thomas,USA",
"James,Adrew,Martin,USA",
);
foreach ( $list as $i => $v ) {
  $list [$i] = iconv('UTF-8','GBK' , $v);
}
$file = fopen("contacts.csv","w");

foreach ($list as $line)
  {
  fputcsv($file,split(',',$line));
  }

fclose($file);

作者: 阿牛

活出自己的态度,走出自己的人生路。 除注明来源,其他皆为原创文章,转载请注明来源,谢谢。