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

中间遇到一个问题是提交的中文文件名直接放到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']);
?>

时间: 2024-10-30 22:01:00

php中强制下载文件的代码(解决了IE下中文文件名乱码问题)_php技巧的相关文章

通过freemarker生成一个word,解决生成的word用wps打开有问题的问题,解决出word时中文文件名乱码问题,解决打开出word时打开的word出现问题的问题,出图片,解决动态列表

 通过freemarker制作word比较简单 步骤:制作word模板.制作方式是:将模板word保存成为xml----在xml的word模板中添加相应的标记----将xml的word文件的后缀名改成ftl文件(要注意的是生成xml格式要是2003格式的xml,也就是说拿到的word模板得是2003格式的,否则用wps打开word将会出现问题)   详细步骤如下: 模板制作(将要动态显示的数据打上标记,这个标记是freemarker中的EL标记,要注意的是,要控制值为空的情况,下面${(si

php 解决substr()截取中文字符乱码问题_php技巧

在php中如果我要用substr()截取字符串全英文的没问题,如果包括有中文或英文就会悲剧了,但大家也 别切我们可以使用其它办法来解决. php截取中文字符串出现乱码,这是最近发现的事情,先前我曾经写过一篇关于自动生成meta信息的文章,那篇关于利用php截取文章前多少字作为description方法,但是出现了IE6无法加载CSS的现象,这里做一个补充. 首先要明确这么一个问题,之所以会出现IE6偶尔无法加载CSS的现象,是因为文件出现了乱码,导致后面的加载CSS的link无法被IE6正确解析

IE php关于强制下载文件的代码_javascript技巧

 作者:xling首先看 xls 文件的下载: //header("Cache-Control: public"); header('content-type:application/vnd.ms-excel'); header("Content-Disposition:attachment; filename=report.xls"); 如果不加第一句,会弹出 : Internet Explorer 无法下载 **.php (来自**网站).Internet Ex

php 强制下载文件实现代码_php技巧

复制代码 代码如下: <?php $file = 'monkey.gif'; if (file_exists($file)) {     header('Content-Description: File Transfer');     header('Content-Type: application/octet-stream');     header('Content-Disposition: attachment; filename='.basename($file));     hea

php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)_php技巧

共分四个文件,分别是创建.增加.删除.修改四个功能,变量都是写死的,改一改用$_POST方式接收就可以用了 //index.php 创建功能 复制代码 代码如下: <?php $xmlpatch = 'index.xml'; $_id = '1'; $_title = 'title1'; $_content = 'content1'; $_author = 'author1'; $_sendtime = 'time1'; $_htmlpatch = '1.html'; jb51.net$doc

解决win7系统所有中文显示乱码的方法教程

  在win7系统下我们如果把语言操作系统界面语言修改为英文后,有部分用户的电脑中的英文字体将显示乱码的问题,对于出现该问题是因为中文不是Unicode语言,用户在将系统语言设置为英文后,语言设置的非Unicode设置出问题而导致的,故此我们需要将非Unicode的语言修改为中文语言即可解决这个问题,下面我们看下具体的操作教程吧! 解决win7系统所有中文显示乱码的方法教程 1.点击开始菜单图标并单击打开控制面板. 2.在区域和语言设置-管理中,选择更改显示语言. 3.选择管理标签,并点击更改系

myeclipse中恢复误删文件和代码

myeclipse中恢复误删文件和代码 [ 恢复误删文件 ] 今天在写代码的时候,不小心把一个包给删除了,然后这个包下所有的文件都没了,相信很多人都有类似的经历, 幸好myeclipse给我们提供了一个很好用的功能: 选中项目 -> Restore from Local History.. -> 界面如下图 勾选要恢复的文件,点击Restore就可以了,就算你把myeclipse关闭了也没关系,非常的方便. [ 恢复误删代码 ] 对于误删的代码,如果没有关闭myeclipse,我们可以按ctr

sql-Asp.net的上传和下载文件的代码怎么写?

问题描述 Asp.net的上传和下载文件的代码怎么写? 我要做一个Asp.netSql数据库的网盘系统,亲们快帮我想想办法啊 解决方案 参考:http://www.cnblogs.com/zcttxs/archive/2012/05/21/2511947.html

dicom-Delphi中读取DICOM文件的代码

问题描述 Delphi中读取DICOM文件的代码 这一句das. attributes. listattrinute('',meno1.lines)中,为什么第一个参数空缺,第一个参数表示什么意思啊?第二个参数meno1.lines是代表的什么?如果要读取一个文件夹下的dcm文件,要怎么改这行代码呢? 解决方案 这个图,少了一个图,不好意思 解决方案二: 阻止删除文件(文件占坑)的delphi代码MATLAB 读取DICOM格式文件delphi 拷贝网络共享文件 代码