解決? (SafariのContent-Disposition問題)

以前取り上げた、日本語ファイル名を含んだContent-Dispositionを、Safariが正しく解釈出来ない件。解決の糸口が見つかりそう。

日本語ファイル名 @ Okumura's Blog

詳細はリンク先を見て頂くとして。要するにContent-Dispositionヘッダの送り方をどんなに工夫しても、ダメなものはダメ。(身もふたもないですが)
ではどうするかというと、PATH_INFO環境変数($_SERVER['PATH_INFO'])を使用する。具体的には、ダウンロード処理を含んだスクリプトを呼び出す為のURIを、以下の様に変更する。

× http://www.example.com/download.php
○ http://www.example.com/duwnload.php/日本語ファイル名.txt

download.phpの中でContent-Dispositionヘッダを送信する際、クライアントのUserAgentがSafariならば、ファイル名として空文字列を指定。こうするとファイル名の決定にPATH_INFOの内容が使用され、結果的に「日本語ファイル名.txt」という名前でダウンロード出来る。
Safari以外に対してはPATH_INFOを参照して、通常通りのContent-Dispositionを送信。おっと、IEでは(Win/Mac共)ファイル名をShift_JISに変えるのをお忘れなく。(これもこれでいい加減な実装だけど、文字化けしないだけマシか)

PATH_INFOに指定するファイル名は、UTF-8-MAC?URLエンコードは不要?
まぁ、このあと試してみます。

# ところで、これを教えてくれた奥村教授。
# LHAの圧縮アルゴリズムを設計された、エライお人でびっくり。

トラックバック

テンプレート ▲ ▼ディレクトリのオープン <?PHP $handle=opendir('.'); while...

コメント


コメントはすぐには反映しません。
ほぼ毎日チェックしていますが、翌日以降の反映となることもあります。

Twitter