PHP 导出CSV 问题全解

最简单的导出方式

使用php提供的fputcsv2 函数

$handle = fopen($fileName, 'w');
        foreach ($data as $key => $item) {
               fputcsv($handle, $fields, $delimiter, $enclosure, $escape_char);
        }
  fclose($handle);

会遇到的问题,中文乱码。

解决中文乱码

原因:windows 的office不支持UTF8编码的csv。
解决:windows下,发送bom头,指定编码格式

  header('Expires: 0');
        header('Cache-control: private');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Content-Description: File Transfer');
        header('Content-Encoding: UTF-8');
        header('Content-type: text/csv; charset=UTF-8');
        header("Content-Disposition: attachment; filename=$name.csv");
        echo "\xEF\xBB\xBF"; // UTF-8 BOM
        foreach ($data as $key => $item) {
            foreach ($item as $value){
                echo $value.",";
            }
            echo "\r\n";
        }

参考网址:PHP导出CSV文件出现乱码的解决方法

解决意外的逗号分隔符

问题:某个字段有逗号,会被拆分成两列。
参考网址中说可以使用双引号包围起来。我没有成功,使用了str_replace

参考网址:理解CSV格式规范(解析CSV必备)

你可能感兴趣的:(PHP 导出CSV 问题全解)