20090210.xls是我在服务器上的一个文件,使用excel打开内容显示很正常;
然后我在PHP中使用如下代码进行下载,下载后打开文件却显示乱码(内容中不用中文也是显示乱码)
有人说好像是是BOM之类的问题,说要设置header的编码,我也试过了都不行,请问是怎么回事呢?$filename = "20090210.xls";
$file = fopen(PUBLIC_EXPORT_DIR.$filename,"r"); // 打开文件
Header("Content-type:application/octet-stream");   
Header("Accept-Ranges:bytes");   
header("Content-Type: application/msexcel");
Header("Accept-Length:".filesize(PUBLIC_EXPORT_DIR.$filename));   
Header("Content-Disposition:attachment;filename=".$filename);   
echo fread($file,filesize(PUBLIC_EXPORT_DIR.$filename));
fclose($file);
显示的如下这样一些东西。 邢唷??;?  ??AB?=?r8X"1??Calibri1??Calibri1??Calibri1??Calibri1??Calibri1??Arial1??Calibri?0?General?? €??? €??? €??? €??? €??? €??? €??? €??? €??? €??? €??? €??? €??? €??? €?? €??? ???? ? ?? ?D ??"? ???
T\US鱊(CQ)褢潣(CQ)罷
T膲<hBh廩瞫/e櫉9h罷
T/0W@W
Nwm鍂髼曐VP[焣哊韕譺b?S1*5媹r偵b墍~g*Na??RGrGr軘#曠p踁孴櫃爛藛|?闟IQfyrSmvY6?og藛c襳!炈?PN郹鰯3€?F?F孎m( 1r胈.^.^f? Q筽XT錧'?f苸h?1)        錯g:2009-02-10?[AB縹飴        錯g:2009-02-10-Nq\S飴縹        錯g:2009-02-10test        錯g:2009-02-10
??A} *+€?????&ffffff?'ffffff?(?)??"dXX333333?333333??

解决方案 »

  1.   


    用这个试一下。
    $filename = "20090210.xls";
    Header("Content-type:application/octet-stream");   
    Header("Accept-Ranges:bytes");
    Header("Accept-Length:".filesize(PUBLIC_EXPORT_DIR.$filename));   
    Header("Content-Disposition:attachment;filename=".$filename);   
    echo file_get_contents($filename);
      

  2.   

    将Header("Content-type:application/octet-stream");   改为
      Header("Content-type:application/force-download");
      

  3.   

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize(PUBLIC_EXPORT_DIR.$filename));
    readfile(PUBLIC_EXPORT_DIR.$filename);
    exit;
      

  4.   

    up 
    我的也出现这个问题
    原来为gb2312 ,转utf-8后,
    本地可以,上传服务器就行了,乱码
    所有下载资源均乱码
      

  5.   

    不知为什么,我的又可以了
     $file = fopen($file_path, "rb"); // 打开文件
    Header('Content-type: application/octet-stream;charset=utf-8');
              //Header("Content-type:application/force-download");
    Header('Accept-Ranges:bytes');
    Header('Accept-Length:' . filesize($file_path));
    Header('Content-Disposition: attachment; filename="' . $row_source['oflname'].'"');
    echo fread($file, filesize($file_path));
    fclose($file);
    exit;
    改了一下,加了rb,
    另外,由于是utf-8的
    charset=utf-8'我觉得可能是服务器的问题
      

  6.   

    写入 excel 之前 要 编码下(iconv)
      

  7.   

    谢谢大家,不过试过上面的任何方式都不行;其次我直接使用excel写了一个没有中文的,也没有可以设置编码的excle文件,然后放到服务器的public目录下;
    然后使用上面代码下载也还是乱码,真不知道是怎么回事?
      

  8.   

    先不要用excel试
    开个.txt写个Hello进去
    试试下载另外~做下载不需设charset
    binary根本不会理会编码...
    就读取发送我用我贴那个代码做下载...
    什么档案,什么编码都可以zip,excel,word,txt都没问题