【php】日本語のファイル名でファイルダウンロードするとき
問題
システムにファイルのダウンロード機能があるのですが、日本語のファイル名でダウンロードさせたいです。
ブラウザによって文字化けしたりするのですが、どうするとよいでしょうか。
答え
<?php
//例
$filename = '日本語のファイル名_日本語-の フ/ァイ ル名.pdf';
//ホワイトスペース相当の文字をアンダースコアに
$filename = preg_replace('/\\s/u', '_', $filename);
//ファイル名に使えない文字をアンダースコアに
$filename = str_replace(array('\\','/',':','*','?','"','<','>','|'), '_', $filename);
//適当なヘッダ
header('Content-Type: application/octet-stream');
//ファイル名はRFC2231形式(最近のブラウザならば対応している)
header("Content-Disposition: attachment; filename*=UTF-8''" . rawurlencode($filename));
//内容出力
readfile('出力したいファイル.pdf');