作者mouse26 (请吱解我)
看板PHP
标题Re: [请益] 请问header()函式 中文名称下载问题
时间Sun Jul 22 12:25:39 2007
问题的症结在於IE没办法自己判断你的档名是什麽编码
所以他会用预设的编码去解释你的档名
Fx自己会辨识就不会有这种问题
CA4Z0ZZK这个应该是IE cache的档名
作法有两个
1.把档名都变成预设编码
$fn=iconv('utf-8','big5',$fn);
2.把档名urlencode
因为这只有IE适用 Fx的会直接把encode出来的东西(%XX)直接显示出来
所以要判断浏览器是IE的时候才 $fn=urlencode($fn);
p.s 这里预设的编码
好像伺服器的设定也可以决定 不过这方面我就没试过了
※ 引述《gmoz (Gmoz)》之铭言:
: $query = "SELECT * FROM uploads WHERE upload_id = {$_GET['uid']}";
: $result = mysql_query($query);
: mysql_query("SET CHARACTER SET 'utf8'"); //这行试过了ˊˋ
: $row=mysql_fetch_array($result);
: $fn=$row['file_name'];
: $extension = explode('.' , $fn);
: $the_file='../uploads/'.$_GET['uid'].'.'.$extension[1];
: header("Content-disposition:attachment;filename=$fn");
: readfile ($the_file);
: 小弟要做的是个让人上传东西,然後可下载的网页
: 使用view_files.php传出uid连到download_fils.php来执行如上的PHP码
: 英文档名没问题,可正常显示档名并且下载
: 遇到中文档名时 (把$fn使用echo印出来是正确的原档名)
: 但是放到header之後档名却出现CA4Z0ZZK.等等的英文字和数字(而且每次点都不一样)
: 由於届时上传档案的可能会包含些公家机关,
: 因此不能上传中文档名可能会造成不便
: 希望各位前辈能帮忙解答,小弟感激不敬
: appsev 2.5.5
: php5
: phpMyAdmin 2.6.4-pl4
: MySQL 版本 5.0.16-nt
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.33.6
1F:推 gmoz:我最後是无意间把mysql_query("SET CHARACTER SET 'UTF8'") 07/22 13:04
2F:→ gmoz:改成mysql_query("SET CHARACTER SET 'big5'")就解决了 q_q 07/22 13:04
3F:→ gmoz:还有作法1不行 原因好像是参数传入时就是中文了(? 07/22 13:05
4F:→ mouse26:... 07/22 15:29
5F:推 knockout:下载档案没人在做中文档名下载的 = =" 07/23 12:18
6F:→ knockout:额外还要判断OS 是WIN的话要送BIG5 MAC送utf-8 07/23 12:18
7F:→ knockout:何必咧~~ 随机取个英文ID自已送不就好了 ... 07/23 12:19
8F:→ gmoz:我存在主机中档名是英文的 下载时会自动更名为原来的档名 07/23 13:04
9F:推 gmoz:K大 我不懂你的第三行 ._. 07/23 13:07
10F:→ gmoz:说错 主机中档名是uid的值 07/23 13:08