PHPで日本語ファイル名でファイルダウンロードさせようとすると、マルチバイトファイル名をそのまま渡すとIEでファイル名が文字化けしてしまう。

header("Content-disposition: attachment; filename=".$name);

一方、URLエンコードするとIEでは大丈夫となるが、FireFoxなどでURLエンコードされたままのファイル名でダウンロードとなる。

header("Content-disposition: attachment; filename=".rawurlencode($name));

以下のようにするのが正解。

header("Content-disposition: attachment; filename*=UTF-8’ja’".rawurlencode($name));

WINのIE、FF、Chrome、Opera
MACのSafari、Chrome、FF

でファイル名が文字化けせずにダウンロードできた。