LIGのメルマガ、はじめました!
LIGのメルマガ、はじめました!
2012.07.23

続・Opera最強伝説!ダウンロードするファイルの名前に日本語を使う時のPHPでの実際の処理

小林

Cmd + Shift + ] 小林です。

前回の記事、ダウンロード時のファイル名が日本語だったらどうなるの?の結果を踏まえまして、その解決方法のPHPでの一例をご紹介しようと思います。

まずは、ダウンロードさせたいファイル名(例では 絶対に働きたくないでござる.zip)を記述します。こちらはUTF-8で記述します。

$fileName = "絶対に働きたくないでござる.zip";

そもそもファイル名に利用できない文字がありますので、そこは注意する必要があります。せっかく日本語で出力しようとしているので、すべて全角文字を使うくらいの気概を見せましょう。

そして、何はなくともブラウザを判別しなければなりません。IEだけのためにこんなことをしなければなりません。

$userAgent = $_SERVER['HTTP_USER_AGENT'];

これでブラウザのユーザーエージェントを取得できます。ポイントは信じることです。疑う事からは何も生まれません。信じて信じて信じ抜くことです。
そして…

if ( preg_match( "/MSIE/i", $userAgent ) ) {
    $fileName = rawurlencode( $fileName );
}

IEだけ。IEだけ別処理です。他の環境はそもそもUTF-8でいいのですからね。
rawurlencode()というのは、「-_.~ を除くすべての非アルファベット文字をパーセント記号(%)に続いて2つの16進数がある表現形式に置き換えた文字列を返す。」関数です。

最後にファイル名を送信してやればいいだけです。

header( "Content-disposition:attachment;filename="{$fileName}"" );

Opera最強伝説!