PHP导出excel文件,导出CSV文件格式文档、PHP导出CSV文档打开乱码解决(方法源码)

技术文档 - php相关

2019-11-21

 暂无演示  

csv文件可以使用excel打开并进行一些操作了,同时我们用php导入csv文件是非常的简单了,所以我们通常会使用php来导出csv了,但有时会碰到在使用Excel打开csv时出现乱码问题了,下面我们就来看解决办法。

乱码情况:

写了一段导出 CSV 文件的代码,可以正常输出。

使用 CSV 和 TXT 程序打开文件是正常的,但是使用 Excel 打开文件就出现了中文乱码的问题(这就奇怪了, 为什么在 Excel 中会乱码呢?)

通过查看编码发现,导出的 CSV 文件是 UTF-8 无BOM编码格式,而我们通常使用 UTF-8 编码格式 都是有 BOM 的。

尝试着添加了 BOM 之后,中文乱码的问题有解决了。

/**
 * 数据导出成CSV文档
 * @param: array  $data  需要导出的数据
 * @param: string $title 导出的文件名字
 */
private function excel($title='',$data)
{
  if(empty($title)) $title = date('Y-m-d H:i:s');
    header("Content-type:text/csv;"); 
  header("Content-Disposition:attachment;filename={$title}.csv");
 header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); 
 header("Content-Encoding: binary");
  header('Expires:0'); 
  header('Pragma:public'); 
  $td = "id,分类,内容,用户,手机,设备,版本,时间\n";
    foreach ($data as $k => $v) {
     $content=str_replace(array("\r","\n"),array("",""),$v["content"]);
      $td .= "{$v['id']},{$v['catid']},{$content},{$v['uname']},{$v['phone']},{$v['machine']},{$v['version']},{$v['update_time']}\n";
    }    
    echo (chr(0xEF).chr(0xBB).chr(0xBF));
    echo $td;   
}

下面再贴出一个给文件加BOM编码的方法

/**
 * 给文件加BOM编码
 * @param: $filepath  文件路径
 */
public function AddBOM($filepath)
{
  $file = fopen($filepath, 'w');
  fwrite($file, chr(0xEF).chr(0xBB).chr(0xBF)); // 添加 BOM
  foreach ($contens as $content) {
  fputcsv($file, $content);
  }
  fclose($file);
}