PHP 简易导出excel 类解决Excel 打开乱码

<?php
class exportCsv{

     //列名
     protected  $_column = array();
     protected  $_reg  = array();
     public     $ret = "";
     
     public function setColumn($colunms){
        
          foreach ($colunms as $k => $colunm){
              $this->_column[$k] = $colunm['title'];
              $this->_reg[$k]['reg'] = $colunm['reg'];
              $this->_reg[$k]['colunm'] = $colunm['name'];
          }
          return $this;
     }
     
     public function bulidData($data){
     
          $this->ret = implode(",", $this->_column);
         foreach($data as $k=>$dat){
             if(!empty($this->_reg)){
                  $dat = call_user_func_array(array($this, 'doFilter') , array($dat));
             }
            $this->ret .= " 
".implode(",", $dat);
         }
     }
     
     public function transport($name="default"){
         header("Content-Disposition: attachment; filename={$name}.csv");
         header("Content-Type:APPLICATION/OCTET-STREAM");
         $bomHeader = pack('H*','EFBBBF');   //将bom头转换二进制放在所有字符顶部,可以解决office Excel打开是乱码的问题
         die($bomHeader.$this->ret);
     }
     
     private function doFilter($data){
         
         foreach($this->_reg as $k =>$fun){
            if( $data[$fun['colunm']] && method_exists($this,$fun['reg'])){
               $data[$fun['colunm']] = $this->$fun['reg']($data[$fun['colunm']]);
            }
         }
         return $data;
     }
     
     //格式化时间戳
     private function dataFormate($timestamp){
         return date("Y-m-d",$timestamp);
     }
     //去除换行
     private function htmlFormate($content){
        return str_replace(array("
","	
"), array(" "," "), $content);
     }
}

使用方法:

$columnArr = array(
               0=>array('title'=>'ID','name'=>'cid'),
               array('title'=>'用户名','name'=>'uid'),
               array('title'=>'评论内容','name'=>'comments','reg'=>'htmlFormate'),
               array('title'=>'评分', 'name'=>'satisfaction', 'reg' =>'int'),
               array('title'=>'商品编码', 'name'=>'goods_sn', 'reg' =>'int'),
               array('title'=>'添加时间','name'=>'add_time','reg'=>'dataFormate'),
               array('title'=>'审核状态','name'=>'status')
           );
           import ( "@.ORG.exportCsv" );
           $csvModel = new exportCsv();
           $csvModel->setColumn($columnArr);
           set_time_limit(0);
           $comments =  $model->table('mall_comments mc')->where($map)->field('cid,uid,comments,satisfaction,goods_sn,add_time,status')->select();
           $csvModel->bulidData($comments);
原文地址:https://www.cnblogs.com/glory-jzx/p/3277031.html