php实现 iso 下载文件,下载文件时safari上中文文件名乱码的处理办法(php代码实现)...
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代码实现)...相关推荐
- 解决浏览器下载文件时中文文件名乱码的问题
解决浏览器下载文件时中文文件名乱码的问题 很多时候我们需要在后台为前端提供文件下载的功能,但是当文件名中有中文时我们不能直接将文件名返回,需要对中文的文件名进行处理后再返回. 一.文件下载contro ...
- 解决文件上传时,服务器中中文文件名乱码问题
解决文件上传时,服务器中中文文件名乱码问题 参考文章: (1)解决文件上传时,服务器中中文文件名乱码问题 (2)https://www.cnblogs.com/yang-xiansen/p/11167 ...
- 解决ServletFileUpload上传文件时,获取上传文件名出现中文乱码问题
解决ServletFileUpload上传文件时,获取上传文件名出现中文乱码问题 在我们使用ServletFileUpload上传文件时,我们通常会获取其上传的文件名,然而当文件名包含中文时,便可能出 ...
- response setHeader 设置下载中文文件名乱码问题
1. HTTP消息头 (1)通用信息头 即能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pragma 主要: Cache-Control , Connecti ...
- response.setHeader()设置下载中文文件名乱码问题
1. HTTP消息头 (1)通用信息头 即能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pragma 主要: Cache-Control , Connecti ...
- linux服务器文件名称乱码,linux中文文件名乱码怎么解决?
由于安装英文版的系统不支持中文,出现中文文件名乱码. 下面操作时在centos上安装中文支持: 1)先下载并安装两个语言包: fonts-chinese-3.02-12.el5.noarch.rpm ...
- linux 文件夹 乱码,linux中文文件名乱码解决
原标题:linux中文文件名乱码解决 由于安装英文版的系统不支持中文,出现中文文件名乱码.下面操作时在centos上安装中文支持. 1)先下载并安装两个语言包: fonts-chinese-3.02- ...
- 使用HttpClient MultipartEntityBuilder 上传文件,并解决中文文件名乱码问题
使用HttpClient MultipartEntityBuilder 上传文件,并解决中文文件名乱码问题 参考文章: (1)使用HttpClient MultipartEntityBuilder 上 ...
- 压缩文件打开其中“中文”文件名乱码
压缩文件打开其中"中文"文件名乱码 只因为压缩文件"名称加密"的锅 解决办法 1.打开压缩文件 2.选择"选项/名称加密"在其中选择&quo ...
最新文章
- 【目录】shell 编程-xyq
- 李牛(Linux)打包
- 如何解决秒杀的性能问题和超卖的讨论
- sa是什么岗位_服务顾问SA在维修企业扮演的重要角色
- 乐视android版本怎么升级,乐视网android手机客户端升级推出V2.0版
- Bailian2856 计算邮资【入门】
- java的反射技术_Java学习——反射技术
- 【pymongodb】去除重复记录
- 在开发板显示24位的bmp格式图片
- Apache——阿帕奇简介
- 怎么把u盘做成启动盘装系统?
- 写一个最简单的mysql编程_要学简单的数据库编程!
- css3实现图片360度旋转及animation、@keyframes的详解
- 【软件工程】第5章 软件需求分析思考题
- Java支付宝订单查询
- 美国东北大学计算机硕士,美国东北大学计算机硕士
- android夜间切换失败,Android夜间模式切换记录
- 不用找,你想要的节日 节庆 节气展板展架模板素材都在这里
- windows 网络正常 浏览器却打不开网页解决办法
- 关于linux用Xshell的xftp查看隐藏文件夹和文件