保存ダイアログでファイル名を指定した際に半角スペースが+(プラス)になる
本日のバグ
前回ダウンロード機能について書きましたが、現在のプロジェクトでも似たような実装を行っており、タイトルのとおりバグが発生しました。
※動作環境はIE8を使用
コードは以下の部分となります。
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode( data.FileName, System.Text.Encoding.UTF8));
Urlエンコードしているのでファイル名に半角スペースが含まれている場合に+(プラス)に置き換わってしまいます。
ぐぐったところ、「+(プラス)」に変換された半角スペースを「%20」に置換して解決というような記事を見つけ修正したのが次です。(同じような内容がいくつかヒットしたのでありがちなミスなのかな?)
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode( data.FileName, System.Text.Encoding.UTF8).Replace("+","%20"));
この修正により「保存」ボタンを押した際のファイル名は半角スペースで表示されたのですが、「開く」ボタンを押した場合は「%20」がそのまま表示されてしまうのでダメでした。
ファイル名に半角スペースは使わないほうがいいとの結論に達し、最終的には半角スペースを含むファイル名の場合は半角スペースをアンダースコアに置換するという仕様で顧客に納得していただきました。
自宅環境で試してみたところIE11では「%20」に置換する対応でも「開く」ボタンを押したときにそのまま表示されてしまうようなことはありませんでした。
ブラウザやバージョンに左右される問題のひとつということがわかりましたが、そろそろ顧客の環境もバージョンアップしていただきたいところであります。