2011-09-14 14 views
3

データベースに保存されているファイルをダウンロードできるページがあります。このページでは、GET変数を使用してデータベーステーブル内の対応するIDを検索し、そのファイルをファイルのヘッダーに添付ファイルとして返します。PHP文字列エンコーディング

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

データベースにアップロードされたファイルは、名前にスペースが含まれている場合は、私が持っている問題は、「3年出費Analysis.pdf」例えば、あるファイルをダウンロードするために返されたときにファイル名がアップします名前のスペースのためにちょうど "3"として。

私はでurlencode、rawurlencodeなどを試してみましたが、完全なファイル名の期待される結果を取得していませんでした。

+0

urlencodeはこのトリックを行う必要があります。投稿を編集してurlencodeを使用しようとするとどうなるでしょうか? – arijeet

答えて

5

引用符の中に置く:

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

Hereは、HTTP仕様の関連する部分です。

更新:HTTPの仕様はquoted-string内部の二重引用符はバックスラッシュでエスケープしなければならないと述べているので技術的には、これは

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

をお読みください。実際には、あなたはその中の二重引用符(I「はそれを許可しファイルシステムをどのさえよく分からない)とファイル名を期待していないが、100%保証、コンプライアンスのためにstr_replaceが必要とされています。

+0

パーフェクト!私は引用符を試しましたが、二重引用符ではなくファイルの名前を一重引用符で囲みました。そして、str_replace上の奇妙なファイル名をキャッチするノートに感謝します。私はそれをボーナスと考えます。 – Jeff