知识大全 PHP下载文件名乱码问题详解

Posted

篇首语:胸怀万里世界, 放眼无限未来。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 PHP下载文件名乱码问题详解相关的知识,希望对你有一定的参考价值。

PHP下载文件名乱码问题详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  通过把Content Type设置为application/octet stream 可以把动态生成的内容当作文件来下载 相信这个大家都会 那么用Content Disposition设置下载的文件名 这个也有不少人知道吧 基本上 下载程序都是这么写的

 header( Content Disposition: attachment; filename= $filename);print Hello! ;?> 

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

  但是 如果$filename是UTF 编码的 有些浏览器就无法正常处理了 比如把上面那个程序稍稍改一下

 header( Content Disposition: attachment; filename= $filename);print Hello! ;?>  

  把程序保存成UTF 编码再访问 IE 下载的文件名就会乱码 FF 下下载的文件名就只有 中文 两个字 Opera 下一切正常

  输出的header实际上是这样子

Content Disposition: attachment; filename=中文 文件名 txt

  其实按照RFC 的定义 多语言编码的Content Disposition应该这么定义

Content Disposition: attachment; filename*= utf %E %B %AD%E % % % %E % % %E %BB%B %E % % D txt

  即

  filename后面的等号之前要加 * filename的值用单引号分成三段 分别是字符集(utf ) 语言(空)和urlencode过的文件名 最好加上双引号 否则文件名中空格后面的部分在Firefox中显示不出来 注意urlencode的结果与php的urlencode函数结果不太相同 php的urlencode会把空格替换成+ 而这里需要替换成%

  经过试验 发现几种主流浏览器的支持情况如下

IE attachment; filename=

FF attachment; filename= UTF 文件名

attachment; filename*= utf

O attachment; filename= UTF 文件名

  Safari (Win) 貌似不支持?上述方法都不行

  这样看来 程序必须得这样写才能支持所有主流浏览器

  $encoded_filename = urlencode($filename);$encoded_filename = str_replace( + %

$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*= utf \\ \\ $filename );

 else header( Content Disposition: attachment; filename= $filename );print ABC ;?>

cha138/Article/program/PHP/201311/21454

相关参考

知识大全 php.ini 文件配置详解

  ;;;;;;;;;;;;;;;;;;作者金步国;;日期;;;;;;;;;;;;;;;;;;  版权声明  ;;;;;;;;;;;;;;;;;;;本文作者是一

知识大全 解决PHP初学者的乱码问题

解决PHP初学者的乱码问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!乱码一直是困扰PHP初学者

知识大全 php读取文件内容的几种方法详解

  示例代码:用file_get_contents以get方式获取内容复制代码代码如下:<?php$url=;$=file_get_contents($url);//print_r($_resp

知识大全 PHP 下载远程文件类(支持断点续传)

PHP下载远程文件类(支持断点续传)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  PHP下载远

知识大全 PHP文件下载的原理及实现

PHP典型模块与项目实战大全:PHP文件下载的原理及实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 基于php使用memcache存储session的详解

  web服务器的phpsession都给memcached这样你不管分发器把ip连接分给哪个web服务器都不会有问题了配置方法很简单就在php的配置文件内增加一条语句就可以了不过前提你需要装好mem

知识大全 解析PHP实现下载文件的两种方法

解析PHP实现下载文件的两种方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本篇文章是对使用PH

知识大全 让PHP更快的为用户提供文件下载

让PHP更快的为用户提供文件下载  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    一般来说我们

知识大全 解析php多线程下载远程多个文件

functionremote($urls$name=$path=$dir=/images/)if(!is_array($urls)orcount($urls)==)returnfalse;dmkdir

知识大全 属性(资源)文件乱码问题的解决之道

Struts1.x系列教程(3):属性(资源)文件乱码问题的解决之道  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快