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

2018-09-21 10:11

阅读:269

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


评论


亲,登录后才可以留言!