phpexcel导出文件乱码问题

以前使用phpexcel类导出xls文件时,没有发现有乱码的问题,可是今天再使用的时候就发现文件下载完成后打开时,excel提示文件的格式与文件指定的格式不一致,打开时就乱码,用记事本打开时是空的,挺无奈,于是google了一下,试了好多都不知道是什么原因,后来在不加参数在浏览器打开之后发现左上角有一个锘字,于是恍然大悟,肯定是文件或者包含的文件前面有空格,于是找了找,终于在自己的类文件里发现<?php前面有一个空格,哎!寻找的方法是以前在网上发现的,现在也忘记出处了,就是用UE,在UE的配置里,文件处理->UTF-8检测,去掉“自动检测UTF-8文件”和“检测UNICODE(UTF-16文件无BOM)”前面的勾,然后重启UE,再打开要查看的文件,就能在文件前面查看有没有类似空格的乱码。

About the Author

在讀研究生,化學/化工專業,主要關注學佛、計算化學、C++、Python、計算機、古文化、哲學、思維方向,渴求與有共同興趣的朋友交流,詳情請查看“關于”頁面。

Recent Comments

  1. chendcwf 说道:

    你好,我遇到以下贴一样的问题:输出的乱码一样但是没有输出警告等错误提示。不知如何解决,帮个忙吧!

    http://topic.csdn.net/u/20091210/11/108d7800-571c-4d79-b70e-f7ca999113a3.html

    回复

    勿慢牛 #
    2011年5月30日  08:05

    正如csdn回复的,一般都是源文件前面有特殊字符,比如一个全角的空格,检查你的源文件,看看开头是否有问题

    header 函数前有输出

    Smarty.php 的117行是什么

    回复

    chendcwf #1
    2011年5月31日  10:14

    @勿慢牛, 不好意思把页面撑破了..你看完就删除了吧.

    回复

    chendcwf #2
    2011年5月31日  12:54

    @勿慢牛, header(“Content-type: text/csv”) 加了一行代码就好了…只是的..

    回复

  2. Wells 说道:

    我了遇到同样的问题,您说查文件编码,怎么查?我那PHPExcel代码写在一个函数里了。就是调用这个函数时就生成下载文件,这要查哪里?

    回复

    勿慢牛 #3
    2011年3月26日  09:31

    查编码可以通过各种IDE,里面有文件编码的内容,比如ultraedit, vim,都可以,其他的地方就是PHP函数是否转换正确,顺便查看生成的EXCEL是什么编码的

    回复

  3. 游客 说道:

    查编码真是让人头疼!!- -

    回复

    勿慢牛 #4
    2010年7月23日  11:42

    @游客, 呵呵,我以前也这样,所以平时应该注意编码统一,查编码用 vim 或者 ultraedit 比较好。

    回复

  4. 游客 说道:

    你好,我现在遇到的问题和stranger一模一样,请问下你们以前是如何解决的?谢谢

    回复

    勿慢牛 #5
    2010年7月22日  17:19

    @游客, 您好,当时我也折腾了N久才发现是编码的问题,先要确定的是PHP文件的编码不要有编码不统一的情况,最好是用UTF-8的编码,其次就是phpexcel的输出编码也要正确,phpexcel的文档里有说明的

    回复

  5. Mark 说道:

    我也有碰见这个问题了。直接保存在服务器没问题,但一旦保存到浏览器就出现了。我也试着用楼主的方法把多余的乱码全部删除了,可还是老样子。。。

    回复

    勿慢牛 #6
    2010年6月19日  07:02

    @Mark, 一般这类问题都是源文件编码不同造成的,推荐的文件编码均用utf-8,您可以对所以关系到输出的源文件检测一下编码,看看是不是UTF-8,不是的话就转换成UTF-8或者你所设的全局编码,不过要注意文件内容会不会随着转换变成乱码,尤其是文件头,这个直接关系到输出。

    回复

  6. stranger 说道:

    问题已经解决,兄弟谢谢你

    回复

    勿慢牛 #7
    2010年5月24日  06:28

    @stranger, 应该还是字符编码的问题吧,呵呵,这么晚还不睡觉,注意身体呀

    回复

  7. stranger 说道:

    是不是我的PHP.INI里面要修改什么东西呢,用PHPEXCEL写入本地没有任何问题。利用HEADER用WEB下载就有了为题,还有就是用UE打开的EXCEL,第一个字符是锘字。感觉无缘无故多出来的乱码很奇怪

    回复

  8. stranger 说道:

    还有就是,我如果不用web的方式下载,用PHPEXCEL直接写到服务器上,不会出现多余的乱码,没有任何问题。
    您给诊断一下。

    回复

  9. stranger 说道:

    程序我已经给你贴出来了,你帮忙看看程序,你以前不是也用PHPEXCEL实现过下载吗。
    没有出现过乱码吗。是不是我的PHP.ini里面要修改什么东西,才不会出现那些乱码,麻烦你帮忙看看,我看了
    程序,感觉程序没有什么为题。程序就是一个简单的下载程序,麻烦了。EXCEL里面什么没有写,内容也有乱码。
    <?php
    /**
    * PHPExcel
    *
    * Copyright (C) 2006 – 2007 PHPExcel
    *
    * This library is free software; you can redistribute it and/or
    * modify it under the terms of the GNU Lesser General Public
    * License as published by the Free Software Foundation; either
    * version 2.1 of the License, or (at your option) any later version.
    *
    * This library is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    * Lesser General Public License for more details.
    *
    * You should have received a copy of the GNU Lesser General Public
    * License along with this library; if not, write to the Free Software
    * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    *
    * @category   PHPExcel
    * @package    PHPExcel
    * @copyright  Copyright (c) 2006 – 2007 PHPExcel ( [url]http://www.codeplex.com/PHPExcel[/url])
    * @license    [url]http://www.gnu.org/licenses/lgpl.txt[/url]    LGPL
    * @version    1.5.0, 2007-10-23
    */
     
    /** Error reporting */
    error_reporting(E_ALL);
    /** Include path **/
    set_include_path(get_include_path() . PATH_SEPARATOR . '../Classes/');
    /** PHPExcel */
    include 'PHPExcel.php';
    /** PHPExcel_Writer_Excel2007 */
    include 'PHPExcel/Writer/Excel2007.php';
     
    require_once 'PHPExcel/Writer/Excel5.php';    
    // ¡䢤?¡§????§ҿ}
    //header("Content-type: application/octet-stream;charset=utf-8.");
    //header("Content-type:application/vnd.ms-excel");               
    //header("Content-Disposition:attachment;filename=data.xls");
    // Create new PHPExcel object
    //echo date('H:i:s') . " Create new PHPExcel object\n";
    $objPHPExcel = new PHPExcel();
    // Set properties
    //echo date('H:i:s') . " Set properties\n";
    $objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
    $objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
    $objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
    $objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
    $objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
    $objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");
    $objPHPExcel->getProperties()->setCategory("Test result file");

    // Add some data
    //echo date('H:i:s') . " Add some data\n";
    $objPHPExcel->setActiveSheetIndex(0);
    //$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Hello');
    //$objPHPExcel->getActiveSheet()->setCellValue('B2', 'world!');
    //$objPHPExcel->getActiveSheet()->setCellValue('C1', 'Hello');
    //$objPHPExcel->getActiveSheet()->setCellValue('D2', 'world!');
    // Rename sheet
    //echo date('H:i:s') . " Rename sheet\n";
    //$objPHPExcel->getActiveSheet()->setTitle('Simple');

    // Set active sheet index to the first sheet, so Excel opens this as the first sheet
    //$objPHPExcel->setActiveSheetIndex(0);
           
    // Save Excel 2007 file
    //echo date('H:i:s') . " Write to Excel2007 format\n";
    $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
    //$objWriter->setOffice2003Compatibility(true);  
    //$objWriter->save(str_replace('.php', '.xls', __FILE__));
     header('Pragma: public');
     header('Expires: 0');
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
     header('Content-Type: application/force-download');
     header('Content-Type: application/octet-stream');
     header('Content-Type: application/download');
     header("Content-Disposition: attachment;filename=data.xls");
     header('Content-Transfer-Encoding: binary');
    //$objWriter->save(str_replace('.php', '.xls', __FILE__));
    $objWriter->save('php://output');
    // Echo done
    //echo date('H:i:s') . " Done writing file.\r\n";
    exit();
    ?>

    回复

  10. stranger 说道:

    老兄,我用PHPExcel导出文件时,导出到服务器上没有问题,可是通过WEB导出到本地的话,就有了问题,即使
    给EXCEL里面不写东西,也有乱码,乱码里面包括下面的东西。
    Root Entry F掔w?掔w?Workbook FA&  
    望老兄,不惜赐教。

    回复

    勿慢牛 #8
    2010年5月22日  20:33

    你试没试过用FTP工具下载下来看看有没有问题,如果没有问题,说明是下载的时候增加什么东西,如果也是如此的话,那就是程序的问题了

    回复

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

Copyright © 2012 勿慢牛 - All Rights Reserved. - Admin - Powered by WordPress