之前做的一个项目,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是输出到浏览器的话,之前不能有任何输出的,否则格式不对就会有错