php一段代码,处理文件下载时的文件名,后来客户反馈说firefox,safari下的中文文件名不能正常显示。

$file_info['title'] = rawurlencode($file_info['title']);

$filename=iconv('utf-8', 'gbk', $file_info['title']);

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

修正为以下内容后firefox,safari下正常显示

如果没有兴趣请看简版,一句话解决

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

header( 'Content-Disposition: attachment; filename*="UTF-8\'\''. rawurlencode($file_info['title']) );

}

之前试过和firefox一样处理方法,结果下载的文件名连扩展名都没有了

header( 'Content-Disposition: attachment; filename*=UTF-8\'\''. rawurlencode($file_info['title']) . '"' );

兜兜转转后发现去掉一对双引号就可以,

求此时此刻内心的阴影面积

一堆代码参考一下。

$file_info['title'] = rawurlencode($file_info['title']);

$filename=iconv('utf-8', 'gbk', $file_info['title']);

// header("Content-Disposition:attachment;filename = " . $filename);$encoded_filename = $file_info['title']

$ua = $_SERVER["HTTP_USER_AGENT"];

//IEif(preg_match("/MSIE/", $ua) || preg_match("/Trident\/7.0/", $ua)){

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

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

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

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

header( 'Content-Disposition: attachment; filename*=UTF-8\'\''. $encoded_filename );

} else{

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

}

相关原理有请度娘上场

浏览器能正确识别的编码格式,只要按照这样的编码来设置对应的Content-Disposition,那么应该就不会出现中文文件名的乱码问题了。

首先,Content-Disposition值可以有以下几种编码格式

1. 直接urlencode:

Content-Disposition: attachment; filename=”struts2.0%E4%B8%AD%E6%96%87%E6%95%99%E7%A8%8B.chm”

2. Base64编码:

Content-Disposition: attachment; filename=”=?UTF8?B?c3RydXRzMi4w5Lit5paH5pWZ56iLLmNobQ==?=”

3. RFC2231规定的标准:

Content-Disposition: attachment; filename*=UTF-8”%E5%9B%9E%E6%89%A7.msg

4. 直接ISO编码的文件名:

Content-Disposition: attachment;filename=”测试.txt”

然后,各浏览器支持的对应编码格式为:

1.  IE浏览器,采用URLEncoder编码

2.  Opera浏览器,采用filename*方式

3.  Safari浏览器,采用ISO编码的中文输出

4.  Chrome浏览器,采用Base64编码或ISO编码的中文输出

5.  FireFox浏览器,采用Base64或filename*或ISO编码的中文输出

new_filename = URLEncoder.encode(filename, “UTF8”);

// 如果没有UA,则默认使用IE的方式进行编码,因为毕竟IE还是占多数的

rtn = “filename=\”” + new_filename + “\””;

if (userAgent != null)

{

userAgent = userAgent.toLowerCase();

// IE浏览器,只能采用URLEncoder编码

if (userAgent.indexOf(“msie”) != -1)

{

rtn = “filename=\”” + new_filename + “\””;

}

// Opera浏览器只能采用filename*

else if (userAgent.indexOf(“opera”) != -1)

{

rtn = “filename*=UTF-8”” + new_filename;

}

// Safari浏览器,只能采用ISO编码的中文输出

else if (userAgent.indexOf(“safari”) != -1 )

{

rtn = “filename=\”” + new String(filename.getBytes(“UTF-8″),”ISO8859-1”) + “\””;

}

// Chrome浏览器,只能采用MimeUtility编码或ISO编码的中文输出

else if (userAgent.indexOf(“applewebkit”) != -1 )

{

new_filename = MimeUtility.encodeText(filename, “UTF8”, “B”);

rtn = “filename=\”” + new_filename + “\””;

}

// FireFox浏览器,可以使用MimeUtility或filename*或ISO编码的中文输出

else if (userAgent.indexOf(“mozilla”) != -1)

{

rtn = “filename*=UTF-8”” + new_filename;

}

}

ref:

header( ‘Content-Disposition: attachment; filename*=UTF-8\’\” . rawurlencode ( $originfile ) );

php实现 iso 下载文件,下载文件时safari上中文文件名乱码的处理办法(php代码实现)...相关推荐

  1. 解决浏览器下载文件时中文文件名乱码的问题

    解决浏览器下载文件时中文文件名乱码的问题 很多时候我们需要在后台为前端提供文件下载的功能,但是当文件名中有中文时我们不能直接将文件名返回,需要对中文的文件名进行处理后再返回. 一.文件下载contro ...

  2. 解决文件上传时,服务器中中文文件名乱码问题

    解决文件上传时,服务器中中文文件名乱码问题 参考文章: (1)解决文件上传时,服务器中中文文件名乱码问题 (2)https://www.cnblogs.com/yang-xiansen/p/11167 ...

  3. 解决ServletFileUpload上传文件时,获取上传文件名出现中文乱码问题

    解决ServletFileUpload上传文件时,获取上传文件名出现中文乱码问题 在我们使用ServletFileUpload上传文件时,我们通常会获取其上传的文件名,然而当文件名包含中文时,便可能出 ...

  4. response setHeader 设置下载中文文件名乱码问题

    1. HTTP消息头 (1)通用信息头 即能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pragma 主要: Cache-Control , Connecti ...

  5. response.setHeader()设置下载中文文件名乱码问题

    1. HTTP消息头 (1)通用信息头 即能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pragma 主要: Cache-Control , Connecti ...

  6. linux服务器文件名称乱码,linux中文文件名乱码怎么解决?

    由于安装英文版的系统不支持中文,出现中文文件名乱码. 下面操作时在centos上安装中文支持: 1)先下载并安装两个语言包: fonts-chinese-3.02-12.el5.noarch.rpm ...

  7. linux 文件夹 乱码,linux中文文件名乱码解决

    原标题:linux中文文件名乱码解决 由于安装英文版的系统不支持中文,出现中文文件名乱码.下面操作时在centos上安装中文支持. 1)先下载并安装两个语言包: fonts-chinese-3.02- ...

  8. 使用HttpClient MultipartEntityBuilder 上传文件,并解决中文文件名乱码问题

    使用HttpClient MultipartEntityBuilder 上传文件,并解决中文文件名乱码问题 参考文章: (1)使用HttpClient MultipartEntityBuilder 上 ...

  9. 压缩文件打开其中“中文”文件名乱码

    压缩文件打开其中"中文"文件名乱码 只因为压缩文件"名称加密"的锅 解决办法 1.打开压缩文件 2.选择"选项/名称加密"在其中选择&quo ...

最新文章

  1. 【目录】shell 编程-xyq
  2. 李牛(Linux)打包
  3. 如何解决秒杀的性能问题和超卖的讨论
  4. sa是什么岗位_服务顾问SA在维修企业扮演的重要角色
  5. 乐视android版本怎么升级,乐视网android手机客户端升级推出V2.0版
  6. Bailian2856 计算邮资【入门】
  7. java的反射技术_Java学习——反射技术
  8. 【pymongodb】去除重复记录
  9. 在开发板显示24位的bmp格式图片
  10. Apache——阿帕奇简介
  11. 怎么把u盘做成启动盘装系统?
  12. 写一个最简单的mysql编程_要学简单的数据库编程!
  13. css3实现图片360度旋转及animation、@keyframes的详解
  14. 【软件工程】第5章 软件需求分析思考题
  15. Java支付宝订单查询
  16. 美国东北大学计算机硕士,美国东北大学计算机硕士
  17. android夜间切换失败,Android夜间模式切换记录
  18. 不用找,你想要的节日 节庆 节气展板展架模板素材都在这里
  19. windows 网络正常 浏览器却打不开网页解决办法
  20. 关于linux用Xshell的xftp查看隐藏文件夹和文件

热门文章

  1. 千锋--企业新闻发布管理项目笔记---上
  2. 多线程(Multi-Thread)
  3. Multi-Scale Metric Learning for Few-Shot Learning(用于小样本学习的多尺度度量学习)
  4. ZigBee基础知识(二)
  5. 从自动驾驶安全报告看谷歌百度双龙会
  6. 液晶显示屏的C语言编码,液晶屏代码单独文件
  7. Git 原理安装和命令解析
  8. algorithm头文件下的常用函数-学习笔记
  9. 海南省大数据管理局项目建设处刘雄:区块链技术在海南政务服务领域的典型应用
  10. 后端必备:常用注解总结!