文件下载Content-disposition(与在文件名文件乱码问题)

场景:
开发中常常遇到文件下,有时需要下载后的文件名自己定义,而不是服务器上的文件名,这是需要用到HTTP中的Content-dispostion

Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。当 Internet Explorer 接收到头时,它会激活文件下载对话框,它的文件名框自动填充了头中指定的文件名。

文件下载例子:

//判断是否是IE
    $is_IE = strstr($_SERVER['HTTP_USER_AGENT'],'MSIE');
    if($is_IE){
        //设置HTTP头信息,IE中Content-Disposition:inline 和attachment 都可以下载
        header("Content-type: text/javascript");
        header("Content-Disposition: attachment; filename=\"download.js\"");
        header("Content-Length: ".filesize("01.js"));
    }else{
        //但是Content-Disposition:inline在FF和chrome 中无法载,所以使用attachment
        header("Content-type: text/javascript");
        header("Content-Disposition: attachment; filename=\"download.js\"");
        header("Content-Length: ".filesize("01.js"));
    }
    if(!$is_IE){
        //控制缓存
        header("Cache-Control: no-cache");
        header("Pragma: no-cache");
    }
    //引入输出文件
    include("01.js");

在该例中FF和chrome中需要将Content-disposition设置为attachment才可以下载成功。否则会直接在浏览器上显示文本内容

解决乱码问题:
1.首先将页面的编码设置成UTF-8编码
2.在IE中显示的中文名称用urlencode()函数编码,其他浏览器直接输出文件名

例子:

$name = '测试001.js';
    $name = urlencode($name);
    //判断是否是IE
    $is_IE = strstr($_SERVER['HTTP_USER_AGENT'],'MSIE');
    if($is_IE){
        //设置HTTP头信息,IE中Content-Disposition:inline 和attachment 都可以下载
        header("Content-type: text/javascript");
        header("Content-Disposition: attachment; filename=\"".$name."\"");
        header("Content-Length: ".filesize("01.js"));
    }else{
        //但是Content-Disposition:inline在FF和chrome 中无法载,所以使用attachment
        header("Content-type: text/javascript");
        header("Content-Disposition: attachment; filename=\"".'测试001.js'."\"");
        header("Content-Length: ".filesize("01.js"));
    }
    if(!$is_IE){
        //控制缓存
        header("Cache-Control: no-cache");
        header("Pragma: no-cache");
    }
    //引入输出文件
    include("01.js");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值