PHPメモ034:ファイルを日本語ファイル名でダウンロードさせる
ファイルを日本語のファイル名でダウンロードさせたい場合にどうすればいいか調べた。
ググって調べると色々情報があったので、それらを参考にして自分は以下のような実装をした。
$server_file_name = 'japanese.pdf'; $download_file_name = '日本語.pdf'; $user_agent = $_SERVER['HTTP_USER_AGENT']; $path = DOWNLOAD_FILE_DIR . $server_file_name; header('Content-type: application/pdf'); if (preg_match("/MSIE/i",$user_agent) === 1) { // IE $download_file_name = rawurlencode($download_file_name); $filename = "filename=\"{$download_file_name}\""; } else if (preg_match("/chrome/i",$user_agent) !== 1 && preg_match("/safari/i",$user_agent) === 1) { // Safari $filename = "filename=\"{$download_file_name}\""; } else { $download_file_name = rawurlencode($download_file_name); $filename = "filename*=utf-8'ja'{$download_file_name}"; } header("Content-Disposition: attachment; {$filename}"); header('Cache-Control: public'); header('Pragma: public'); readfile($path);
下記PC用ブラウザで確認した。スマホ、タブレットでは未確認。
IEが8と古いのは確認したPCのOSがXPだったので^^;
Macのfirefox、WindowsのSafariでは確認していない。
- IE 8.0.6001.18702
- firefox 24.0
- chrome 29.0.1547.76m
- Safari(Mac) 5.1.10
IE、Safari、その他で分けている。
IEではファイル名をURLエンコードしている。
その他(FireFox、Chrome)では文字コードを指定してファイル名をURLエンコードする。
SafariではUTF-8のファイル名をそのまま使っている。Safariであることの確認はUser-Agentに "Chrome" が含まれていないことかつ "Saferi" が含まれていること。ChromeのUser-Agentには "Safari" が含まれているらしい。
参考サイト:
ファイルダウンロード時のファイル名が文字化けする対処法 - [PHP + PHP] ぺんたん info
Webから日本語ファイル名でダウンロード - みちのぶのねぐら A面
userAgent一覧/ユーザーエージェント一覧
« PHPメモ033:Smarty3の変数 | Main | エラーメッセージからの情報漏洩 »
「PHP」カテゴリの記事
- LaravelでHello World とか諸々(2015.05.13)
- Laravel4のインストール(2015.05.06)
- PHPメモ051:includeとrequireの使い分け(2015.06.19)
- CakePHPのインストール(2015.06.14)
- PHPからPDOでPostgreSQLに接続する(2015.06.09)
TrackBack
TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/58288832
Listed below are links to weblogs that reference PHPメモ034:ファイルを日本語ファイル名でダウンロードさせる:
Comments