zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

PHP中文文件下载代码 问题 解决 乱码
2023-06-13 09:14:28 时间
中间遇到一个问题是提交的中文文件名直接放到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);
echostripslashes($_REQUEST["content"]);
?>


解决PHPHeader下载文件在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.""");
}elseif(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);
echostripslashes($_REQUEST["content"]);
?>