帮系做了一个网站,有一个上传资源和下载资源的模块.    部署在我机器上时,上传上去的文件下载来下都是没有问题的(doc,txt...都正常).    但部署到服务器上去(win server 2003),文件下载下来都是乱码的,除了只有英文的txt文件.    服务器上的用的是apache2.2 php5,而且php5的HOME是用我机器上的HOME覆盖的.    请教大家,这个问题的原因是什么?(系统文件编码?)
             怎么解决这个问题?    谢谢.急...

解决方案 »

  1.   

    服务器Apache设置编码了么
    还有是不是服务器缺少字体啊
      

  2.   

    编码问题。
    系统编码   ide工具编码   
      

  3.   

    php上传中文文件名乱码解决方案,你试一下如下代码,需要进行转码:
    $image_name = mktime().mt_rand(10000,100000).$_FILES['file']['name']; //图像的新名字
    move_uploaded_file($_FILES['file']['tmp_name'],iconv("UTF-8", "gb2312", BASEIMAGEPATH.'/'.$image_name)); //移动图像
     主要需要搞清楚上传文件时如果文件名里有中文需要进行相应的转码
      

  4.   

    乱码的问题根源在于编码没有统一为 i18n 规范的 UTF-8 之类的 Unicode 编码, 最好避免用 "skyaspnet" 所介绍的 iconv 将 UTF-8 转换为 GB 码, 因为这可以说是技术上的倒退, 干吗不同意为 UTF-8 呢, 从 Apache 设置开始强制默认编码 UTF-8 再在 header 和 meta 等处都强化之, 浏览器方会自动按照这样的设置适应 UTF-8 编码的; 非浏览器譬如被微软强制为 l10n 的命令提示符之类的才需要用 iconv 转换呢 ...假设您说的 "下载" 是指浏览器 ...
      

  5.   

    文件是二进制的内容,同样的内容无论在哪里都是一样的。
    其实文件下载跟编码没有关系的,但是你做法有问题所以跟编码就有关系了。做法1: http://localhost/download.php?file=xxxx.doc
    做法2: http://localhost/document/xxxx.doc我猜你肯定用的是第二种做法,因为doc文件不是动态网页,所以当成文本打开,内容的编码用缺省的ISO编码,这样肯定是乱码了。如果是第一种做法就不会有这个问题。如果非要采用做法2的话,可以改doc的MIME格式定义。配置如下:
    AddType application/microsoft .xls .doc .ppt .mdb
      

  6.   


    我用的是做法1:
       http://192.168.131.131/ied/down.php?dn_id=35
      

  7.   

    主要是下面的代码:
    $fn = array_pop( explode( '/', strtr( $this->filename, '', '/' ) ) );
    header( "Pragma: public" );
    header( "Expires: 0" ); // set expiration time
    header( "Cache-Component: must-revalidate, post-check=0, pre-check=0" );
    header( "Content-type:".$this->mineType );
    header( "Content-Length: " . filesize( $this->filename ) );
    header( "Content-Disposition: attachment; filename=" . $this->fileDesc . "." . $this->filetype );
    header( 'Content-Transfer-Encoding: binary' );
    readfile( $this->filename );
    return true;
      

  8.   

    譬如在 header 中加上 "Content-Type: text/html; charset=utf-8" 就是一种强制方式 ...
      

  9.   

    编码问题,你看看下载的文件的二进制开头是不是多了EF BB BF,如果是的话,是因为php 不支持utf8 bom造成的。