IEの日本語ファイル名の文字化けに苦しむ

なかば趣味で某社(というか弊社)の社内ポータルサイトWordPressを使って構築している。社内ポータルといっても、それほど高機能なものではなく、社外で作業している従業員が定型文書などをダウンロードできればよい、というもの。

アップロードしたファイル名に日本語が含まれていた場合は、MD5で変換されたファイル名でサーバーに保存される。(これはWordPressの日本語化パッチの機能。)しかし、そのままのファイル名だとダウンロードしたあとに何が何だか分からないので、データベースに保存されているタイトル(元のファイル名から取得したもの)をファイル名に書き戻してダウロードさせる、という処理を入れた。これは9月くらいには出来ていて、手元のChromeFirefox、そしてIE9でも動作を見たが問題はなさそうに思えた。

主な定型文書のアップロードも終わり、そろそろ公開できるかなと思っていた矢先、今週になって「ダウンロードしたファイルが文字化けしている」と教えてもらった。どうやらIE8以前では、ダウンロードしたファイルが文字化けしている。IE9もよく調べてみると、ダウンロードする手順によってOKな時とNGな時がある。

User Agentを見てMSIEの時はファイル名をShift JISで出すようにすると改善はしたが、まだ問題が残っていた。具体的には、リンクを右クリックして「対象をファイルに保存」とすると化けない、リンクをクリックして表示されるダイアログでは化ける、という具合。IEはその動作によってクエリのエンコードの解釈を変えているように見える。

結局、三重大の奥村先生のPHP講座「日本語ファイル名」のやり方に従って、ファイル名をクエリではなくPATH_INFOで渡すことで解決した。

いろいろ苦しめられたので、Chrome15がIE8を抜いたというニュースは朗報に思えてしまう。。
Chrome 15、Internet Explorer 8 を抜いて世界で最も人気のあるブラウザに