最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
php实现中文文件名文件下载
时间:2013-03-08 编辑:简简单单 来源:一聚教程网
如
代码如下 | 复制代码 |
$filename = "中文 文件名.txt"; |
把程序保存成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
例1
代码如下 | 复制代码 |
$file = "/tmp/中文名.tar.gz"; $filename = basename($file); header("Content-type: application/octet-stream"); //处理中文文件名 header('Content-Disposition: attachment; filename="' . $filename . '"'); |
这样我们就完全解决了中文文名乱码这个问题了。
-
上一个: php 字符串编码转换程序
-
下一个: php无限级分类(带层深)算法
相关文章
- 解决PHP中file_exists()判断中文文件名无效 01-23
- PHP开发中文件操作疑难问答 03-10
- PHP导出数据超时的优化建议解读 10-31
- PHP之mysql位运算解析 10-31
- Laravel实现登录跳转功能解析 10-31
- php双向队列解读 10-31