有很多朋友php下载文件时都是把中文名转换在英文或全数字的然后再进行下载,下面我来介绍直接利用中文文件名文件下载并且不出现乱码的解决办法,代码如下:

$filename = "中文 文件名.txt";

header('Content-Type: application/octet-stream');

header('Content-Disposition: attachment; filename=' . $filename);

print "Hello!";

?>

把程序保存成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

实例代码如下:

$file = "/tmp/中文名.tar.gz";

$filename = basename($file);

header("Content-type: application/octet-stream");

//处理中文文件名

$ua = $_SERVER["HTTP_USER_AGENT"];

$encoded_filename = urlencode($filename);

$encoded_filename = str_replace("+", "%20", $encoded_filename);

if (preg_match("/MSIE/", $ua)) {

header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');

} else if (preg_match("/Firefox/", $ua)) {

header("Content-Disposition: attachment; filename*="utf8''" . $filename . '"');

} else {

header('Content-Disposition: attachment; filename="' . $filename . '"');

}

header('Content-Disposition: attachment; filename="' . $filename . '"');

header("Content-Length: ". filesize($file));

readfile($file);

?>

这样我们就完全解决了中文文名乱码这个问题了。

(责任编辑:最模板)

php实现中文文件名文件下载,php实现中文文件名文件下载相关推荐

  1. SmartUpload上传下载及文件名和文件内容中文问题

    一.安装篇 jspSmartUpload是由www.jspsmart.com网站开发的一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中.该组件有以下几个特点: 1.使用 ...

  2. python解决open()函数、xlrd.open_workbook()函数文件名包含中文,sheet名包含中文报错的问题

    python解决open()函数.xlrd.open_workbook()函数文件名包含中文,sheet名包含中文报错的问题 参考文章: (1)python解决open()函数.xlrd.open_w ...

  3. Linux服务器配置PHP文件下载,出现中文乱码问题,下载出错

    俩个坑点 1. 操作系统的编码问题 windows上的默认编码是gbk,所以如果文件名采用的是中文,那么上传到Linux上面,由于默认编码是utf-8就会出现文件名乱码! 解决办法,手动重命名 2. ...

  4. Spring 文件下载,出现中文乱码问题

    Spring 文件下载,出现中文乱码问题 @GetMapping("/file/{id}")public ResponseEntity<InputStreamResource ...

  5. php压缩中文乱码,完美解决PHP中文乱码

    一.首先是PHP网页的编码 1.php文件本身的编码与网页的编码应匹配 a.如果欲使用gb2312编码,那么php要输出头:header("Content-Type:text/html;ch ...

  6. python中文分词统计_python 实现中文分词统计

    总是看到别人用Python搞各种统计,前端菜鸟的我也来尝试了一把.有各种语义分析库在,一切好像并不是很复杂.不过Python刚开始看,估计代码有点丑. 一.两种中文分词开发包 thulac (http ...

  7. R包中文文本挖掘chinese.misc的中文说明

    转载:https://github.com/githubwwwjjj/chinese.misc 中文文本分析方便工具R包chinese.misc的中文说明 很多人都问过的问题: (1)哪里有更多介绍? ...

  8. GRUB4DOS中文自述文档;Grub4dos中文ReadMe

    GRUB4DOS中文自述文档 版本:0.4.4-2009-03-18 英文版作者:tinybit (tinybit@tom.com) 中文版译者:zw2312914(zw2312914@126.com ...

  9. linux redhat中文字体安装,Linux redhat中文字体安装.doc

    Linux redhat中文字体安装 Linux redhat中文字体安装 安装完linux redhat 5.4,打开浏览器发现显示中文全部成了乱码,原来在安装的时候没有选择安装中文字体支持包,打开 ...

  10. php 对象json中文乱码,解决php json中文乱码问题

    php json中文乱码的解决办法:首先将类中的中文字段进行url编码:然后再将对象进行json编码:最后进行url解码即可解决乱码问题. PHP中json中文乱码问题解决 问题: 众所周知使用jso ...

最新文章

  1. python怎么做彩票概率_用Python一次性把论文作图与数据处理全部搞定!
  2. cobaltstrike安装_Cobalt Strike发送钓鱼邮件
  3. 学习AOP 之前必须明白的几个概念
  4. Qt Creator 使用技巧
  5. redis 附近的人_使用redis—geo api实现搜索附近的人,自己写的一个composer包
  6. Docker学习七:使用docker搭建Hadoop集群
  7. (20)FPGA面试技能提升篇(SGMII、LOCALBUS)
  8. IIS和APACHE共用80端口的方法
  9. 【matlab-2】Matlab语法
  10. 【跃迁之路】【507天】程序员高效学习方法论探索系列(实验阶段264-2018.06.27)...
  11. Discuz代码分析:getgpc($k, $t='GP')获取超全局数组值
  12. html编辑器如何设置滚动字幕,使用Axure RP为网页添加滚动字幕的具体操作步骤
  13. react加水印_多功能React影像组件(拖拽、水印、缩放、切换、旋转)
  14. 页面怎么导出html文件大小,报表HTML导出时自适应页面大小
  15. 【YoLov5实战】记录一次不太成功的实战,足球场人物识别
  16. 2021年金属非金属矿井通风考试试卷及金属非金属矿井通风作业考试题库
  17. 华为A1路由器虚拟服务器,华为a1路由器怎么设置DHCP服务器功能
  18. 2019年学习java还有前途吗?
  19. percona-xtrabackup
  20. 重装win10、ubuntu和双系统

热门文章

  1. lesson2--html-css基础主要知识点
  2. 三、逻辑结构与存储结构的区分
  3. 《数据结构 C++ 语言描述》电子书下载 -(百度网盘 高清版PDF格式)
  4. STEP找不到CPU
  5. 抛InterruptedException的方法
  6. Chrome安装JsonView插件指南
  7. 纠错技术之FEC(向前纠错)
  8. LabVIEW调用第三方exe软件或操作操作控制第三方软件界面的控件,如操控烧录软件
  9. 毕业设计部分作品展示
  10. Win10安装Rtree包报错:OSError: could not find or load spatialindex_c-64.dll