欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

phpexcel乱码

程序员文章站 2022-04-09 23:42:34
...
之前做的一个项目,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")." 
"; }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 ("BOM found, automatically removed."); } else { return ("BOM found."); } } 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是输出到浏览器的话,之前不能有任何输出的,否则格式不对就会有错

相关标签: phpexcel乱码