本篇内容主要讲解“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++传递动态内存的方法是什么”吧!【引入】 看下面的例子,这是我们在编写库函数或者项目内的共同函数经常希望的。复…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。