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 相关文章推荐
PHP文本数据库的搜索方法
Oct 09 PHP
用PHP+MySql编写聊天室
Oct 09 PHP
用PHP动态生成虚拟现实VRML网页
Oct 09 PHP
PHP Header用于页面跳转要注意的几个问题总结
Oct 03 PHP
.htaccess文件保护实例讲解
Feb 06 PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 PHP
php获取apk包信息的方法
Aug 15 PHP
PHP实现的比较完善的购物车类
Dec 02 PHP
php中smarty变量修饰用法实例分析
Jun 11 PHP
PHP处理会话函数大总结
Aug 05 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
Mar 29 PHP
PHP实现本地图片转base64格式并上传
May 29 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
PHP 和 MySQL 基础教程(四)
2006/10/09 PHP
php中iconv函数使用方法
2008/05/24 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
php封装的page分页类完整实例
2016/10/18 PHP
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
使用JavaScript获取电池状态的方法
2014/05/03 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
js实现移动端轮播图效果
2020/12/09 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python中copy()与deepcopy()的区别小结
2018/08/03 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
Python通过字典映射函数实现switch
2020/11/06 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
什么是数组名
2012/05/10 面试题
个人职业生涯规划书1500字
2013/12/31 职场文书
少儿节目主持串词
2014/04/02 职场文书
绿色环保标语
2014/06/12 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
股权转让协议书
2014/12/07 职场文书
尼克胡哲观后感
2015/06/08 职场文书
李强优秀员工观后感
2015/06/16 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL
vue实力踩坑之push当前页无效
2022/04/10 Vue.js