当前位置:  编程技术>php

解决PHP文件下载时中文文件名乱码的问题

    来源: 互联网  发布时间:2014-10-13

    本文导语:  本节内容: php文件下载中文文件名乱码。 在php编程中,通过把Content-Type设置为application/octet-stream,可以把动态生成的内容当作文件来下载。 另外,还可以使用Content-Disposition设置下载的文件名。   >>> 编辑推荐: php文件下载(...

本节内容:
php文件下载中文文件名乱码。

在php编程中,通过把Content-Type设置为application/octet-stream,可以把动态生成的内容当作文件来下载。
另外,还可以使用Content-Disposition设置下载的文件名。
 

>>> 编辑推荐:
php文件下载(防止中文文件名乱码)的示例代码
php实现文件下载、支持中文文件名的示例代码
php文件下载代码(多浏览器兼容、支持中文文件名)
php文件下载类(支持多种文件类型)
 

例子:
 

代码示例:

 

用浏览器打开之后,即可下载document.txt。

但是,如果$filename是UTF-8编码的,有些浏览器就无法正常处理了。

例子:
 

代码示例:

 

把程序保存成UTF-8编码再访问,IE6下载的文件名就会乱码。
FF3下下载的文件名就只有“中文”两个字。Opera 9下一切正常。

输出的header:
Content-Disposition: attachment; filename=中文 文件名.txt

其实按照RFC2231的定义,多语言编码的Content-Disposition应该这么定义:
Content-Disposition: attachment; filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"
即:
filename后面的等号之前要加 *filename的值用单引号分成三段,分别是字符集(utf8)、语言(空)和urlencode过的文件名。最好加上双引号,否则文件名中空格后面的部分
在Firefox中显示不出来。

注意,urlencode的结果与php的urlencode函数结果不太相同,php的urlencode会把空格替换成+,而这里需要替换成%20。

经过试验,发现几种主流浏览器的支持情况如下:
 

IE6  attachment; filename=""
FF3  attachment; filename="UTF-8文件名"
   attachment; filename*="utf8''"
Opera9           attachment; filename="UTF-8文件名"
Safari3(Win)    貌似不支持?上述方法都不行

以下代码,可以支持所有主流浏览器:
 

代码示例:

    
 
 

您可能感兴趣的文章:

  • IE浏览器在post提交时中文乱码的解决方法
  • JAVA 里用XSL解析XML文档时中文问题的解决,请教各位!
  • JAVA POST与GET数据传递时中文乱码问题解决方法
  • MVC的一种开放源码实现--Struts在应用时中文出现乱码如何解决???
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 求助文件操作中修改文件中字段的问题,请大家帮忙解决
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • 为什么在KNOME下复制文件时文件管理器经常崩溃?有何解决办法?
  • Java读写包括中文的txt文件时不同编码格式问题解决
  • 访问JSP文件或者Servlet文件时提示下载的解决方法
  • cocos2d中CCSpriteFrameCache文件同时存在两个plist的问题解决
  • ubuntu下修改 vim 配置 将 .inc 后缀文件 动态当作不同文件对待的解决办法
  • 为什么我上传文件的时候,如果遇到文件名是中文的,虽然可以上传,但不可以下载,怎么解决?
  • qt生成的EXE文件需要它本身的DLL文件才能执行。请问怎么解决
  • 一些文件未注册导致mssql表文件无法找开的解决方法
  • linux下copy文件通常又些文件名的大小写会发生变化的,而linux又对大小写敏感,如何解决这一问题
  • hp-ux上的裸设备文件怎么突然变成文件系统了,请高手解决。
  • 编译内核时出现同名文件该怎么解决
  • 完成一个文件上传需要解决那些问题?
  • 去掉vs2010中ipch文件和.sdf文件的解决方法
  • sh命令能不能拆分某文件?急求解决方法??
  • IIS7无法读取配置文件解决办法
  • 我使用的是root用户登陆,但却不能编辑/etc/profile文件,该如何解决。
  • linux FC5下用程序生成的文件中,中文变成问号,怎么解决?
  • 新手初到跪求大虾linux系统自动生成同名的文件与后缀~文件解决办法
  •  
    本站(WWW.169IT.COM)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.169IT.COM)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • secureCRT下Linux终端汉字乱码解决方法
  • jsp中文乱码 jsp mysql 乱码的解决方法
  • Get中文乱码IE浏览器Get中文乱码解决方案
  • 各位打印过PDF文档吗?我打印的时候,经常打出乱码来,比如don't就会变成乱码,还有其它非英文字符也会变成乱码,有解决方法吗?
  • php网页标题中文乱码如何解决
  • mysql数据库乱码之保存越南文乱码解决方法
  • solaris显示乱码,该怎么解决?
  • 乱码问题真的是这样解决吗?
  • python中文乱码的解决方法
  • 解决jsp页面使用网络路径访问图片的乱码问题
  • windows环境下Mysql中文乱码问题解决方法
  • php pdo编码乱码问题的解决方法
  • mysql query browser中文乱码的解决方法
  • 超初级问题:显示乱码的问题怎么解决?
  • 高分求中文乱码解决办法
  • php网页标题中文乱码的有效解决方法
  • java中怎样解决汉字乱码问题?
  • jsp页面传参乱码的解决方法
  • response.getWriter().write()向前台打印信息乱码问题解决
  • 安装Redhat选者简体中文,执行Xconfigurator,屏幕上看到乱码,如何解决?
  • 我的rh linux 8 不支持中文,中文显示乱码,该安装什么?或怎么解决?
  • window.onload事件覆盖掉body onload事件(window.onload和html body onload事件冲突)解决办法
  • VS2005解决方案管理器中不显示解决方案节点的解决办法
  • sharepoint 2010中item.Update()和item.SystemUpdate 修改数据版本问题解决
  • 有高手能破解RAR的密码吗,至今没有找到人能解决?(先只给10分意思意思,若解决,至少给解决的人500分!说话算话!)
  • andriod中UIScrollView无法正常滚动的解决方法
  • 解决 select 挡住div的解决方法
  • 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决
  • 奇怪,怎么“已解决”问题只有4页(10/17日之后的),以前的已解决问题到哪里看?
  • vs2010下禁用vmware的方法以及解决vmware插件导致vs2010变慢的问题
  • 解决!解决!求助如何安装多系统!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

    浙ICP备11055608号