teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追伸

2018/06/09 09:35

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,31 @@
1
1
  Edge で検証したわけではないですが・・・
2
2
 
3
- ダウンロードするファイル名に日本語を使うのはいろいろ問題があるので、「ファイル名には ASCII 文字以外は使わない」というのが一番の解決策だと思いまが、どうしてもということであれば、新しいブラウザは RFC 6266 (RFC 2231/RFC 5987) をサポートしているはずですので、その点を考慮して Content-Disposition を設定してはいかがですか。
3
+ ダウンロードするファイル名に日本語を使うのはいろいろ問題があるので、「ファイル名には ASCII 文字以外は使わない」というのが一番の解決策だと思いまが、どうしてもということであれば、新しいブラウザは RFC 6266 (RFC 2231/RFC 5987) をサポートしているはずですので、その点を考慮して Content-Disposition を設定してはいかがですか。
4
+
5
+ **【追伸】**
6
+
7
+ Edge 42.17134.1.0 で試してみました。
8
+
9
+ 質問者さんの環境で、
10
+
11
+ ```
12
+ header('Content-disposition: attachment; filename=日本語ファイル名.pdf');
13
+ ```
14
+ としたところは応答ヘッダではどうなるか不明ですが、たぶん "日本語ファイル名" の部分を含めてすべて UTF-8 になると想像しています。
15
+
16
+ つまり、"日本語ファイル名" の部分は UTF-8 のバイト列 e6 97 a5 e6 9c ac e8 aa 9e ... として送信されるのでは?
17
+
18
+ その想像が当たっていれば、Windows 10 の IE11 でも Edge でも文字化けします。(文字化けの仕方はちょっと違いますが)
19
+
20
+ "日本語ファイル名" の部分を UTF-8 パーセントエンコーディングして %e6%97%a5%e6%9c%ac%e8%aa%9e... とすれば IE11, Edge なら大丈夫です。
21
+
22
+ ただし、多分 Firefox, Safari では文字化けすると思いますし、IE11, Edge 限定であっても、ファイル名に半角空白が含まれている場合は多分また別の問題が出ると思います。
23
+
24
+ なので、上にも書きましたが RFC 6266 に従って Content-Disposition を以下のように設定するのがよさそうです。
25
+
26
+ ```
27
+ Content-Disposition: attachment;filename*=utf-8''%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e5%90%8d.pdf
28
+ ```
29
+ ただし、それでもなお問題があって、RFC 6266 をサポートしてないブラウザもあるようで、全てのブラウザに対して文字化けの対応をするのは難しそうです。
30
+
31
+ やはり、**上にも書きましたが「ファイル名には ASCII 文字以外は使わない」というのが正解だと思います**。