My Photo

« PHPメモ033:Smarty3の変数 | Main | エラーメッセージからの情報漏洩 »

September 29, 2013

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」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

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:ファイルを日本語ファイル名でダウンロードさせる:

« PHPメモ033:Smarty3の変数 | Main | エラーメッセージからの情報漏洩 »

April 2017
Sun Mon Tue Wed Thu Fri Sat
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof