之前做的一个项目,utf8编码的,导出excel正常
现在的一个项目,也是utf8的,把之前的代码拷过来
输出时居然出现乱码
想不明白是什么原因
所有文件的编码都是utf8的

解决方案 »

  1.   

    都改成gbk的,excel的默认编码就是gbk吧?
    否者转码成gbk的
      

  2.   

    http://blog.csdn.net/ohmygirl/article/details/6907946这是我之前写的phpExcel乱码的总结,你可以看看,希望对你有帮助。
      

  3.   

    应检查是否与 BOM 头有关
      

  4.   

    版主老大总是会提到BOM,在网上copy了一段代码.if (isset($_GET['dir'])){ //设置文件目录  
    $basedir=$_GET['dir'];  
    }else{  
    $basedir = '.';  
    }  
    $auto = 1;  
    checkdir($basedir);  
    function checkdir($basedir){  
    if ($dh = opendir($basedir)) {  
      while (($file = readdir($dh)) !== false) {  
       if ($file != '.' && $file != '..'){  
        if (!is_dir($basedir."/".$file)) {  
         echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";  
        }else{  
         $dirname = $basedir."/".$file;  
         checkdir($dirname);  
        }  
       }  
      }  
    closedir($dh);  
    }  
    }  
    function checkBOM ($filename) {  
    global $auto;  
    $contents = file_get_contents($filename);  
    $charset[1] = substr($contents, 0, 1);  
    $charset[2] = substr($contents, 1, 1);  
    $charset[3] = substr($contents, 2, 1);  
    if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {  
      if ($auto == 1) {  
       $rest = substr($contents, 3);  
       rewrite ($filename, $rest);  
       return ("<font color=red>BOM found, automatically removed.</font>");  
      } else {  
       return ("<font color=red>BOM found.</font>");  
      }  
    }  
    else return ("BOM Not Found.");  
    }  
    function rewrite ($filename, $data) {  
    $filenum = fopen($filename, "w");  
    flock($filenum, LOCK_EX);  
    fwrite($filenum, $data);  
    fclose($filenum);  
    }  
      

  5.   

    我用的是官方的样例代码
    总不会有错吧// Create new PHPExcel object
    $objPHPExcel = new PHPExcel();// Set properties
    $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
     ->setLastModifiedBy("Maarten Balliauw")
     ->setTitle("Office 2007 XLSX Test Document")
     ->setSubject("Office 2007 XLSX Test Document")
     ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
     ->setKeywords("office 2007 openxml php")
     ->setCategory("Test result file");
    // Add some data
    $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A1', 'Hello')
                ->setCellValue('B2', 'world!')
                ->setCellValue('C1', 'Hello')
                ->setCellValue('D2', 'world!');// Miscellaneous glyphs, UTF-8
    $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A4', 'here')
                ->setCellValue('A5', 'that');// Rename sheet
    $objPHPExcel->getActiveSheet()->setTitle('Simple');
    // Set active sheet index to the first sheet, so Excel opens this as the first sheet
    $objPHPExcel->setActiveSheetIndex(0);
    // Redirect output to a client’s web browser (Excel5)
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="01simple.xls"');
    header('Cache-Control: max-age=0');$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
      

  6.   

    随便说一下我用的是thinkphp框架,跟这个应该没啥关系吧
      

  7.   

    斑竹的回复看了么,先检查下文件是否有bom头。header('Content-Type: application/vnd.ms-excel');这句加上编码header('Content-Type: application/vnd.ms-excel;charset=utf-8');
      

  8.   

    用你的代码测试了,没有乱码。检查下你的文件格式。另存为utf-8无bom格式的。
      

  9.   


    既然代码没有问题,那么原因可能有两个:
    1.你的文件有bom头,导致excel输出前已经有别的内容输出了,就会造成错乱。2.phpExcel版本问题,最新的应该是1.7.6吧?
    或者还有可能,你的代码除了这些还有其他的代码,而那些代码又输出或者有错误。。
      

  10.   

    问题找到了,竟然是改写的tp的rbac中的一句引用文件的问题,原来是类开始引用,现改为在方法内部引用就没事了,谢谢
      

  11.   

    如果以上方法还是出现乱码,则可能是输出缓冲区中有其他多余的内容,在php文件中设置excel内容之间清理一下输出缓冲区吧:<?php ob_clean();?>
      

  12.   

    我也碰到乱码问题,连新建一个空的excel文件也有乱码,按照20楼的方法清空一下缓冲区才终于解决了!!!
      

  13.   

    也有可能是之前有输出信息,如果是elcel是输出到浏览器的话,之前不能有任何输出的,否则格式不对就会有错