php中强制下载文件的代码(解决了IE下中文文件名乱码问题)


Posted in PHP onMay 09, 2011

中间遇到一个问题是提交的中文文件名直接放到header里在IE下会变成乱码,解决方法是将文件名先urlencode一下再放入header,如下。

<?php 
$file_name = urlencode($_REQUEST['filename']); 
header("Pragma: public"); header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Type: application/force-download"); 
header('Content-Type: application/vnd.ms-excel; charset=utf-8'); 
header("Content-Transfer-Encoding: binary"); 
header('Content-Disposition: attachment; filename='.$file_name); 
echo stripslashes($_REQUEST['content']); 
?>

解决PHP Header下载文件在IE文件名中文乱码有两种常见的,一种是是把页面编码改成utf8,另一种是对中文url进入urlencode编码就可以解决了。
解决方案一(我的页面是utf-8编码):

$filename = "中文.txt"; 
$ua = $_SERVER["HTTP_USER_AGENT"]; 
$encoded_filename = urlencode($filename); 
$encoded_filename = str_replace("+", "%20", $encoded_filename); 
header('Content-Type: application/octet-stream'); 
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 . '"'); 
}

解决方法二

将文件名先urlencode一下再放入header,如下。
代码如下:

<?php 
$file_name = urlencode($_REQUEST['filename']); 
header("Pragma: public"); header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Type: application/force-download"); 
header('Content-Type: application/vnd.ms-excel; charset=utf-8'); 
header("Content-Transfer-Encoding: binary"); 
header('Content-Disposition: attachment; filename='.$file_name); 
echo stripslashes($_REQUEST['content']); 
?>
PHP 相关文章推荐
教你如何把一篇文章按要求分段
Oct 09 PHP
模仿OSO的论坛(三)
Oct 09 PHP
供参考的 php 学习提高路线分享
Oct 23 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
Oct 29 PHP
PHP中的生成XML文件的4种方法分享
Oct 06 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
Apr 01 PHP
成为好程序员必须避免的5个坏习惯
Jul 04 PHP
PHP获取二维数组中某一列的值集合
Dec 25 PHP
WordPress中获取所使用的模板的页面ID的简单方法
Dec 31 PHP
PHP简单实现循环链表功能示例
Nov 10 PHP
PHP排序二叉树基本功能实现方法示例
May 26 PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 PHP
PHP新手入门学习方法
May 08 #PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 #PHP
php 大数据量及海量数据处理算法总结
May 07 #PHP
php 截取字符串并以零补齐str_pad() 函数
May 07 #PHP
php调用mysql数据 dbclass类
May 07 #PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
May 07 #PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
May 07 #PHP
You might like
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
PHP通过加锁实现并发情况下抢码功能
2016/08/10 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
nodejs 如何手动实现服务器
2018/08/20 NodeJs
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
Python实用日期时间处理方法汇总
2015/05/09 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
Python 画出来六维图
2019/07/26 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
Python中常见的数制转换有哪些
2020/05/27 Python
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
.NET面试10题
2014/02/24 面试题
在C#中如何实现多态
2014/07/02 面试题
证券期货行业个人的自我评价
2013/12/26 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
树转促学习心得体会
2014/09/10 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
CSS基础详解
2021/10/16 HTML / CSS
Golang流模式之grpc的四种数据流
2022/04/13 Golang