• ベストアンサー

ファイルのアップロードで、ファイル名が文字化けして困っています

いつもお世話になります。 いろいろ調べましたが解決しませんでした。 今社内で、情報共有掲示板を作成しているのですが、 ファイルをアップロードすると、ファイル名がぐちゃぐちゃになっています。(英数字は問題ありません) たとえば、自己申告0936.xls をアップロードすると、シォクハソスケ・936.xls となってしまいます。 PHPで作成し、サーバはApache2で、OSはWindows2000です。プログラムはEUC,MySQLはEUCの設定です。 ファイル名をデータベースにも登録するようにしていますが、そこでは文字化けは起こりません。 if($_FILES['file1']['name'] != ""){ mkdir("$uploaddir"); $ufile1 = $_FILES['file1']['name']; $uploadfile = $uploaddir.$ufile1; move_uploaded_file($_FILES['file1']['tmp_name'],$uploadfile); } 一部ですが、最大10個ファイルを送れるようにしています。 どうかよろしくお願いいたします!!

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

  • ベストアンサー
回答No.3

$uploadfile = $uploaddir.$ufile1; move_uploaded_file($_FILES['file1']['tmp_name'],$uploadfile); 以下に変更して下さい。 $uploadfile = $uploaddir.$ufile1; move_uploaded_file($_FILES['file1']['tmp_name'], mb_convert_encoding($uploadfile, "SJIS", "EUC-JP")); mb_convert_encoding()は、php.iniでマルチバイト関数を 有効にしておく必要があります。 変更する点は以下等を参考にして下さい。 http://aki.adam.ne.jp/scripts/question/write.php?mode=res&id=1463

tomofriend
質問者

お礼

ありがとうございました!おっしゃるとおりにすると文字化けせずに解決できました。 本当にありがとうございます。

その他の回答 (2)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

多分ファイル名がSjisとかになっているのでは? WINの内部文字コードはS-JISなので・・・ PHP内で受け取ったファイルネームをエンコードすればできると思います。(多分) というか、ファイルをアップロードすると文字化けして、Mysql上では文字化けしない・・・? というのはどういうことでしょうか? アップロードしてMysqlで記録したときには文字化けしないで、読み出したときに文字化けしているということでしょうか?

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.1

アップロードするフォームのHTMLの文字コードは何になってますか? ちゃんとEUCになってますか? 現象的には文字コードの問題だと思うので、各箇所のコードを確認してみてだくさい。

tomofriend
質問者

補足

回答ありがとうございます。 ヘッダーは以下のようになっていますので、EUCで問題ないと思います。 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html;charset=euc-jp"> <title>XXXX -登録-</title>

関連するQ&A