如何在PHP下载文件名中解决乱码的问题
文章是对如何在PHP下载文件名中解决乱码的问题进行了详细的分析介绍,需要的朋友参考下。
通过把Content-Type设置为application/octet-stream,可以把动态生成的`内容当作文件来下载,相信这个大家都会。那么用Content-Disposition设置下载的文件名,这个也有不少人知道吧。基本上,下载程序都是这么写的:
复制代码 代码如下:
$filename = "";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
print "Hello!";
?>
但是,如果$filename是UTF-8编码的,有些浏览器就无法正常处理了。比如把上面那个程序稍稍改一下:
复制代码 代码如下:
$filename = "中文 文件名";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
print "Hello!";
?>
输出的header实际上是这样子:
Content-Disposition: attachment; filename=中文 文件名其实按照RFC2231的定义,多语言编码的Content-Disposition应该这么定义:
Content-Disposition: attachment; filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%"即:
?filename后面的等号之前要加 *
?filename的值用单引号分成三段,分别是字符集(utf8)、语言(空)和urlencode过的文件名。
?最好加上双引号,否则文件名中空格后面的部分在Firefox中显示不出来
?注意urlencode的结果与php的urlencode函数结果不太相同,php的urlencode会把空格替换成+,而这里需要替换成%20
经过试验,发现几种主流浏览器的支持情况如下:
IE6
attachment; filename=""
FF3
attachment; filename="UTF-8文件名"
attachment; filename*="utf8''"
O9
attachment; filename="UTF-8文件名"
Safari3(Win)
貌似不支持?上述方法都不行
这样看来,程序必须得这样写才能支持所有主流浏览器:
复制代码 代码如下:
$ua = $_SERVER["HTTP_USER_AGENT"];
$filename = "中文 文件名";
$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 . '"');
}
print 'ABC';
?>
-
php修改上传文件大小限制实例详解
php在默认情况下,只允许上传一定大小的文件,当上传文件大小超过这个值时,将会出错。本文章将向大家讲解中如何修改上传文件大小限制。需要修改的设置有三个地方,请看下文:1、修改max_execution_time在php中,默认的页面最久执行时间为30秒,超过30秒,该脚本就停止执行....
-
php中怎么实现回删功能
导语:以下的'是本站小编为大家整理的php实现回删功能的实例,希望对你有所帮助。functiondel(){varinput=lementsByName('inp')[0]e;alert(tructor);}</script><table><tr><tdonclick="inpu(1)">1</td><tdonclick="inpu(2)">2</td><tdonclick="inpu(3)">...
-
php格式输出文件var-export函数
php格式输出文件var_export函数,以实例形式讲述了格式输出函数var_export的特性与具体用法,具有一定的参考借鉴价值,需要的朋友可以参考下.本文实例讲述了php格式输出文件var_export函数的用法。分享给大家供大家参考。具体如下:var_export:php4>=4.2.0,php5var...
-
Yii2创建表单(ActiveForm)方法
Yii2创建表单(ActiveForm)的方法,结合实例形式详细分析了Yii创建表单的详细步骤及相关函数与属性的使用技巧,需要的朋友可以参考下.由于表单涉及到一些验证方面的信息,属性设置又比较多、比较复杂,所以哪里有什么不正确的地方请留言指点目录表单的生成表单中的方...