各浏览器下载文件名乱码情况示例

转自:http://hi.baidu.com/nathena/blog/item/d9b169fd422cc71e09244dd9.html

 

下载文件名乱码
情景一
1.GBK文件
2.下载的文件名不包含空格。
如下代码
<?php
//GBK charset
$filename = "GBK文件,文件名不包含空格!.txt";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
echo "GBK文件,文件名不包含空格!";
?>
测试结果
1.ie正常。
2.FF正常.
3.safari乱码.
4.opera正常.
5.chrome正常。
情景二
1.GBK文件
2.下载的文件名包含空格。
如下代码
<?php
//GBK charset
$filename = "GBK文件,文件名包含空 格!.txt";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
echo "GBK文件,文件名包含空格!";
?>
测试结果
1.ie正常。
2.FF仅有空格前一部份.
3.safari乱码.
4.opera正常.
5.chrome正常。
情景三
1.UTF8文件
2.下载的文件名不包含空格。
<?php
//UTF8 charset
$filename = "UTF8文件,文件名不包含空格!.txt";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
echo "UTF8文件,文件名不包含空格!";
?>
测试结果
1.ie乱码。
2.FF正常.
3.safari乱码.
4.opera正常.
5.chrome正常。
情景四
1.UTF8文件
2.下载的文件名包含空格。
<?php
//UTF8 charset
$filename = "UTF8文件,文件名包含空 格!.txt";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
echo "UTF8文件,文件名包含空格!";
?>
测试结果
1.ie乱码。
2.FF仅有空格前一部份.
3.safari乱码.
4.opera正常.
5.chrome正常。
情景五
按照RFC2231的定义,多语言编码的Content-Disposition应该这么定义:
Content-Disposition: attachment; filename*=utf8'浏览器语言'URL编码
1.GBK/UTF8文件
2.下载的文件名包含空格。
3.附件名urlencode
<?php
$filename = "GBK文件,文件名包含 空格!.txt";
$encoded_filename = urlencode($filename);
$encoded_filename = str_replace("+", "%20", $encoded_filename);
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename*=GBK/'zh_cn/''.$encoded_filename);
echo "GBK文件,文件名包含空格";
?>
<?php
$filename = "UTF8文件,文件名包含 空格!.txt";
$encoded_filename = urlencode($filename);
$encoded_filename = str_replace("+", "%20", $encoded_filename);
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename*=utf8/'zh_cn/''.$encoded_filename);
echo "UTF8文件,文件名包含空格";
?>
测试结果
1.ie不正常。
2.FF正常.
3.safari乱码.
4.opera正常.
5.chrome不正常。
<?php
$filename = "UTF8文件,文件名包含 空格!.txt";
$encoded_filename = urlencode($filename);
$encoded_filename = str_replace("+", "%20", $encoded_filename);
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$encoded_filename);
echo "UTF8文件,文件名包含 空格";
?>
测试结果
1.ie乱码。
2.FF显示url编码.
3.safari显示url编码.
4.opera显示url编码.
5.chrome正常。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String filename = "UTF8文件,文件名包含 空格!.txt";
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition","attachment;filename="+new String(filename.getBytes(),"ISO-8859-1"));
out.println("UTF8文件,文件名包含 空格!.txt"));
out.flush();
out.close();
%>
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String filename = "GBK文件,文件名包含 空格!.txt";
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition","attachment;filename="+new String(filename.getBytes(),"ISO-8859-1"));
out.println("GBK文件,文件名包含 空格!.txt"));
out.flush();
out.close();
%>
测试结果
1.ie正常。
2.FF仅有空格前一部份。
3.safari乱码。
4.opera正常。
5.chrome正常。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String filename = "UTF文件,文件名包含 空格!.txt";
response.setContentType("application/x-msdownload");
response.addHeader("Content-Disposition","attachment;filename="+new String(filename.getBytes("UTF-8"),"ISO-8859-1"));
out.println(UTF文件,文件名包含 空格);
out.flush();
out.close();
%>
1.ie乱码。
2.FF仅有空格前一部份。
3.safari乱码。
4.opera正常。
5.chrome正常。
注意!!!Safari一直乱码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值