SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【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');

関連するメモ

コメント