2011-09-14 93 views
3

我有一個頁面,允許用戶下載存儲在數據庫中的文件。該頁面簡單地使用GET變量在數據庫表中查找相應的ID,並將該文件作爲文件頭中的附件返回。PHP字符串編碼

header("Content-length: $objFile->size"); 
header("Content-type: $objFile->type"); 
header("Content-Disposition: attachment; filename=".($objFile->name)); 

我的問題是,如果上傳到數據庫中的文件包含在名稱中有空格,比如「3年支出分析.pdf」,然後在返回下載的文件的文件名出現由於名稱中的空間而只是「3」。

我試過urlencode,rawurlencode和其他人,但沒有得到完整的文件名的預期結果。

+0

urlencode應該做的伎倆。你可以編輯你的文章,並顯示你嘗試使用urlencode? – arijeet

回答

5

將其放在引號:

header('Content-Disposition: attachment; filename="'.($objFile->name).'"'); 

Here是HTTP規範的相關部分。

更新:從技術上講,這應該讀

str_replace('"', '\\"', $objFile->name) 

因爲HTTP規範規定,一個quoted-string內使用雙引號字符必須用反斜槓進行轉義。實際上,您不希望文件名中帶有雙引號(我甚至不確定哪些文件系統允許),但爲了100%保證符合要求,需要str_replace

+0

完美!我試過引號,但是我在文件名稱周圍使用了單引號而不是雙引號。感謝str_replace上的註釋以捕獲任何奇怪的文件名稱。我會考慮這個獎金。 – Jeff