解决PHP下载文件名中乱码的解决方法
复制代码代码如下所示:
文件;
头('content-type:应用/字节流);
头('content-disposition:附件文件名=。$文件名);
打印你好!;
>
然而,如果美元是UTF-8编码的文件名,有些浏览器将无法妥善处理。例如,改变上述程序一点点:
复制代码代码如下所示:
文件名为中文文件名;
头('content-type:应用/字节流);
头('content-disposition:附件文件名=。$文件名);
打印你好!;
>
输出头实际上是这样的:
内容配置:依恋;文件名=中文文件名.txt;事实上,根据rfc2231定义、多语言编码的内容应该被定义。
内容配置:依恋;文件名=utf8% % % % E4 B8 AD E6 % 96% 87% 20% 96% 87% E4 E6 % % % % % 90% BB B6 E5 8D。txt:
在文件名的等号前加上*
文件名的值分为三段,用单引号,这是字符集(utf8),语言(空的),并对urlencode文件名。
最好是添加双引号,否则文件名后面空间的部分不会显示在Firefox中。
注意:URLEncode的结果不作为PHP urlencode函数的结果一样,和PHP urlencode会用+代替空间,这就需要更换为20
实验结束后,我们发现几个主流浏览器的支持如下:
IE6
附件;文件名
FF3
附件;文件名= 名称的文件UTF-8
附件;文件名=utf8
O9
附件;文件名= 名称的文件UTF-8
safari3(赢)
它似乎不受支持吗上述方法没有一种是可以做到的。
通过这种方式,必须编写程序来支持所有主流浏览器:
复制代码代码如下所示:
UA _server美元美元{ =http_user_agent};
文件名为中文文件名;
encoded_filename美元= urlencode($文件名);
encoded_filename美元= str_replace(+
头('content-type:应用/字节流);
如果(preg_match( / / MSIE
头('content-disposition:附件文件名=。encoded_filename美元。);
} else if(preg_match( / / 火狐
头('content-disposition:依恋;文件名* = / / UTF8。$文件名;
{人}
头('content-disposition:附件文件名=。文件名;
}
print'abc;
>