PHP

PHPでファイルダウンロードするときのファイル名(Windows)

More than 1 year has passed since last update.

DBに登録してある文字列をファイル名にする

PHPで構築したWebサービスで、何らかのファイルをダウンロードするとして、ファイル名をDB(MySQL)に登録してある該当レコードのテキスト値にしたいというとき。
※MySQLの文字コードはUTF-8
その値には"ファイル名に使えない文字"が含まれているかもしれないし、改行コードが含まれているかもしれない、なんて場合は…

コード

filename.php
$file_name = DBから取ってきたテキスト;
// 改行コードを空白に変換
$file_name = str_replace(array("\r\n","\r","\n"), " ", $file_name);
// HTMLエンティティを文字に戻す
$file_name = htmlspecialchars_decode($file_name);
// ファイル名無効文字の全角化
$file_name = str_replace(array("\\","/",":",",",";","*","?","<",">","|"), array("¥","/",":",",",";","*","?","<",">","|"), $file_name);
// エンコード
$file_name = mb_convert_encoding($file_name, 'SJIS-win', 'UTF-8');

DBにどんな値が入り得るかによると思いますが。

あと、Windows向けです。
Macだとどうなるんでしょう?