首頁 >後端開發 >php教程 >phpexcel乱码

phpexcel乱码

WBOY
WBOY原創
2016-06-23 14:13:501282瀏覽

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


回复讨论(解决方案)

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

之前utf-8又没问题?

http://blog.csdn.net/ohmygirl/article/details/6907946

这是我之前写的phpExcel乱码的总结,你可以看看,希望对你有帮助。

应检查是否与 BOM 头有关

版主老大总是会提到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);  }  

全是英文跟数字也会有乱码么?
把你代码贴来看看。
我用的是官方的样例代码
总不会有错吧

// 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');

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

斑竹的回复看了么,先检查下文件是否有bom头。

header('Content-Type: application/vnd.ms-excel');

这句加上编码

header('Content-Type: application/vnd.ms-excel;charset=utf-8');

斑竹的回复看了么,先检查下文件是否有bom头。

header('Content-Type: application/vnd.ms-excel');

这句加上编码

header('Content-Type: application/vnd.ms-excel;charset=utf-8');
上一句有了,下一句加上了还是不行

用你的代码测试了,没有乱码。

检查下你的文件格式。另存为utf-8无bom格式的。

难道是我的项目有问题?

难道是我的项目有问题?

既然代码没有问题,那么原因可能有两个:
1.你的文件有bom头,导致excel输出前已经有别的内容输出了,就会造成错乱。

2.phpExcel版本问题,最新的应该是1.7.6吧?
或者还有可能,你的代码除了这些还有其他的代码,而那些代码又输出或者有错误。。

把UTF8编码该为GB2312试一下

既然代码没有问题,那么原因可能有两个:
1.你的文件有bom头,导致excel输出前已经有别的内容输出了,就会造成错乱。

2.phpExcel版本问题,最新的应该是1.7.6吧?
或者还有可能,你的代码除了这些还有其他的代码,而那些代码又输出或者有错误。。
问题找到了,竟然是改写的tp的rbac中的一句引用文件的问题,原来是类开始引用,现改为在方法内部引用就没事了,谢谢

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

都不能用啊!!!!!

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

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn