こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

全角ファイル名をアップロードすると文字化け

複数のファイルをアップロードできるスクリプトを作成しています。
サーバはWindows、PHPのバージョンは5です。
利用者の要望で日本語のファイル名もアップロードできるようにしたいのですが、文字化けします。

http://okwave.jp/qa1724442.html
を参考にし、下記のスクリプトを
move_uploaded_file($att_tmp, mb_convert_encoding($att_name,"UTF-8"));
と、変更もしてみましたが、うまくいきません。
$valueは文字化けせずに表示されていますが、サーバ上ではファイル名が「逋コ陦ィ謇ソ隱阪す…」という風に化けてしまいます。
対策を教えて頂けませんでしょうか。
よろしくお願いします。

if (isset($_POST["submit"])){
//添付ファイル用変数
foreach($_FILES["att"]["error"] as $key => $error_a){
if($error_a == UPLOAD_ERR_OK){
$att_na = $_FILES["att"]["name"][$key];
$att_tmp = $_FILES["att"]["tmp_name"][$key];
$att_type = $_FILES["att"]["type"][$key];
$att_size = $_FILES["att"]["size"][$key];

if (strlen($att_na)>0){
//ファイル移動
list($att_nam,$k) = explode(".",$att_na);
$ymdhis = date("YmdHis");
$att_name = "{$att_nam}-{$ymdhis}.{$k}";
move_uploaded_file($att_tmp, "file/$att_name");

$att_name_ar[] = $att_name;
foreach($att_name_ar as $value){
echo $value."<br>";

}
}
}
}

投稿日時 - 2008-07-03 17:26:53

QNo.4148602

すぐに回答ほしいです

質問者が選んだベストアンサー

アップロードする目的だけでは不可能のようです。

アップロードしたファイルを、
またユーザーがダウンロードする事があるのでしたら、
アップロードする元の2バイト文字を含むファイル名を、
MySQLなどのデータベースに保存しておいて、
実際のアップロードファイルは半角文字に連番などを付けて管理し、
ダウンロード時にデータベースから参照して、
保存名の初期値に元の名前を表示するようにされたらいいと思います。

それぞれのやり方はわかっていたのですが、
他が忙しくなったので完成せずじまいになっているので、
サンプルコードを提供できなくてすみません。

投稿日時 - 2008-07-04 11:15:48

お礼

回答ありがとうございます!
MySQLを使用してデータを保存していたので、項目を1つ追加してリンク用のファイル名と表示用のファイル名をそれぞれ別に保存するようにしてうまくいきました。
変更後のスクリプトは自分で対処できましたので大丈夫です。
とても助かりました!アドバイス本当にありがとうございました。

投稿日時 - 2008-07-04 15:30:10

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

結論をいいます。
全角文字を使う限り文字化けしない完璧な対応方法はありません。
全角文字を使うことはさけてください。

場合によって英数字と許された記号以外の文字が送られてきた場合は
自動でzipアーカイブしてしまうのも手かもしれませんね

投稿日時 - 2008-07-03 18:04:05

お礼

回答ありがとうございます!
全角文字でアップロードすることはやはり難しいのですね。
今回はNo2さんの方法で解決しましたが、zipアーカイブする方法も今後の選択肢の1つとして覚えておきます。

投稿日時 - 2008-07-04 15:27:31

あなたにオススメの質問