php文件下载文件名乱码如何解决


本篇内容主要讲解“php文件下载文件名乱码如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php文件下载文件名乱码如何解决”吧! php文件下载文件名乱码的解决办法:1、把“Content-Type”设置为“application/octet-stream”;2、设置“header(‘Content-Disposition: attachment; filename*=”utf8”’ . $filename . ‘”‘);} else {header(…)”即可。php 文件下载文件名乱码怎么办PHP下载文件名解决乱码通过把Content-Type设置为application/octet-stream,可以把动态生成的内容当作文件来下载,相信这个大家都会。那么用Content-Disposition设置下载的文件名,这个也有不少人知道吧。基本上,下载程序都是这么写的:代码如下:

$filename="document.txt";
header('Content-Type:application/octet-stream');
header('Content-Disposition:attachment;filename='.$filename);
print"Hello!";

这样用浏览器打开之后,就可以下载document.txt。

这样用浏览器打开之后,就可以下载document.txt。但是,如果$filename是UTF-8编码的,有些浏览器就无法正常处理了。比如把上面那个程序稍稍改一下:代码如下:

$filename="中文文件名.txt";
header('Content-Type:application/octet-stream');
header('Content-Disposition:attachment;filename='.$filename);
print"Hello!";

把程序保存成UTF-8编码再访问,IE6下载的文件名就会乱码。 FF3下下载的文件名就只有“中文”两个字。Opera 9下一切正常。输出的header实际上是这样子:Content-Disposition: attachment; filename=中文 文件名.txt其实按照RFC2231的定义,多语言编码的Content-Disposition应该这么定义:代码如下:

Content-Disposition:attachment;filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"

即:filename后面的等号之前要加 *filename的值用单引号分成三段,分别是字符集(utf8)、语言(空)和urlencode过的文件名。最好加上双引号,否则文件名中空格后面的部分在Firefox中显示不出来注意urlencode的结果与php的urlencode函数结果不太相同,php的urlencode会把空格替换成+,而这里需要替换成%20经过试验,发现几种主流浏览器的支持情况如下:

IE6attachment;filename=""
FF3attachment;filename="UTF-8文件名"
attachment;filename*="utf8''"
O9attachment;filename="UTF-8文件名"

Safari3(Win) 貌似不支持?上述方法都不行这样看来,程序必须得这样写才能支持所有主流浏览器:代码如下:

$ua=$_SERVER["HTTP_USER_AGENT"];
$filename="中文文件名.txt";
$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.'"');
}
print'ABC';
?

到此,相信大家对“php文件下载文件名乱码如何解决”有了更深的了解,不妨来实际操作一番吧!这里是百云主机网站,更多相关内容可以进入相关频道进行查询免费云主机域名,关注我们,继续学习!

相关推荐: C++传递动态内存的方法是什么

这篇文章主要讲解了“C++传递动态内存的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++传递动态内存的方法是什么”吧!【引入】 看下面的例子,这是我们在编写库函数或者项目内的共同函数经常希望的。复…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/16 13:34
下一篇 02/16 13:34

相关推荐