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

 更新时间:2011年05月09日 19:15:44   作者:  
以下这段代码作用是:浏览器提交excel格式的数据和文件名到服务器上,PHP将请求转化为可下载的excel文件,并要求浏览器弹出文件下载提示窗口
中间遇到一个问题是提交的中文文件名直接放到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文件读写操作相关函数总结

    这篇文章主要介绍了PHP文件读写操作相关函数总结,本文总结了fwrite()、fread()、fgets()、fgetc()、file()、readfile() 等函数的介绍及使用例子,需要的朋友可以参考下
    2014-11-11
  • php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法

    php使用ZipArchive提示Fatal error: Class ZipArchive not found in的

    这篇文章主要介绍了php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法,是使用ZipArchive时经常会遇到的问题,需要的朋友可以参考下
    2014-11-11
  • php通过function_exists检测函数是否存在的方法

    php通过function_exists检测函数是否存在的方法

    这篇文章主要介绍了php通过function_exists检测函数是否存在的方法,实例分析了php使用function_exists检测函数是否存在及调用的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • 详解PHP匿名函数与注意事项

    详解PHP匿名函数与注意事项

    这篇文章主要为大家详细介绍了详解PHP匿名函数与注意事项,匿名函数是PHP5.3引进来的,想要学习匿名函数的朋友可以参考一下
    2016-03-03
  • PHP实现的单向散列加密操作示例

    PHP实现的单向散列加密操作示例

    这篇文章主要介绍了PHP实现的单向散列加密操作,涉及PHP数据传输及加密解密等相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • 腾讯CMEM的PHP扩展编译安装方法

    腾讯CMEM的PHP扩展编译安装方法

    这篇文章主要介绍了腾讯CMEM的PHP扩展编译安装方法,较为详细的分析了CMEM的功能、作用及安装使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • 邮箱正则表达式实现代码(针对php)

    邮箱正则表达式实现代码(针对php)

    本篇文章是对php中邮箱正则表达式的实现代码进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP设计模式中工厂模式深入详解

    PHP设计模式中工厂模式深入详解

    工厂模式,是一种实例化对象的方式,只要输入需要实例化对象的名字,就可以通过工厂对象的相应工厂函数来制造你需要的对象,工厂模式的最主要作用就是对象创建的封装、简化创建对象操作
    2022-11-11
  • header与缓冲区之间的深层次分析

    header与缓冲区之间的深层次分析

    实际的开发中,大家是否听说过在header之前不能有任何的实际输出。甚至有的认为header函数必须写在代码的最前面。可是你是否试验过header函数之前输出东西?下来让我们更深层次的了解一下
    2016-07-07
  • php 进阶:实现无限分类

    php 进阶:实现无限分类

    php 进阶:实现无限分类...
    2006-12-12

最新评论