2011-06-18 108 views
1

我已經有一個PHP代碼,以迫使用戶下載文件時, 代碼一直運作良好頭下載文件,其中包含它的文件名分號

的問題是,當用戶要下載的文件包含分號的文件名

例如 代碼會成功如果文件名XYZ.zip

不會是如果文件名aaaX成功; Y.zip(讀作 aaax [分號] Y [點] ZIP) 當用戶下載,文件名成爲aaaX

它切第一個分號

<?php 

$a=basename($_GET['fn']); 
$sizepath =filesize(base64_decode($_GET['path'])); 

header('Content-Type: application/octet-stream'); 
header("Content-Disposition: attachment; filename=".$a); 
header('Cache-control: private, must-revalidate'); 
header('Content-Transfer-Encoding: binary'); 
// load the file to send: 

readfile(base64_decode($_GET['path'])); 
?> 

回答

4

使用urlencode(),像這樣:

header("Content-Disposition: attachment; filename*=us-ascii'en-us'".urlencode($a)); 

有關更多信息,請參閱RFC 2231

+0

+1你的方式更正確 – Igor

+0

謝謝mate..but如果文件名有'(引號)?我試過你的代碼,它在我以前的問題中起作用 – yukou

+0

'urlencode()'函數對引號進行編碼,所以它們應該沒問題。 –

2

試試這個

header("Content-Disposition: attachment; filename=\"" . $a . "\"");