• 締切済み

ファイルのアップロード

1.ファイルを選択 2.アップロードボタンで、ファイルをアップロード 3.アップされたファイル名をブラウザに表示 といった処理をするときに、1で選択したファイル名が日本語だと3のとき、正しく表示されません。たとえば飲み会.jpgをアップすると、a_a__aa_a__a__a.jpgと表示されてしまいます。半角英数字だと問題ないのですが・・・ 正しく日本語で表示させるにはどのようにすればいいでしょうか?アドバイスよろしくお願いいたします。 ※アップロードはPEARのHTTP_Upload()でやっています。 ※WindowsXPのIE,Firefox、MacのSafariで使います。

  • PHP
  • 回答数3
  • ありがとう数0

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

受け取ったファイル名を、HTML表示する文字コードに あわせて変換すればできるんじゃないですか?

  • hima-827
  • ベストアンサー率24% (1087/4414)
回答No.2

通常、半角英数字のみしかアップロード出来ない場合が多いです。 名前は、半角のローマ字で対応するしかないのでは?

  • Deep__Blue
  • ベストアンサー率48% (1590/3297)
回答No.1

httpサーバは殆どが全角・半角日本語を扱えませんが、 そのサーバは扱えるのでしょうか?

関連するQ&A

  • 画像がアップロードできない・・・

    safariを使用しています。ヤフオクに画像をアップロードしたいのですが、iphotoから書き出ししたファイルはJPGと書き出され、jpeg・jpgにファイル名を変更しても、何度もgif・jpegのみ使用してくださいと表示され、画像アップできません。 どうしたらいいのでしょうか?かなり困ってます。 使用環境はOS10.3.3です。safari1.2です。

    • ベストアンサー
    • Mac
  • ファイルのアップロードについて

    phpのmove_uploaded_fileを使用してアップロードをしようと思うのですがアップロードが出来ません。 状況は ローカル環境のwindowsでのアップロードは行えるがlinuxでは失敗してしまいます。 move_uploaded_fileからはエラーは出力されていません そもそもmove_uploaded_fileが成功しているのになんでアップロードされていないのか分かりません。 //■HTML <form name="form1" method="post" action="upload.php" ENCTYPE="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="10485760" /> <table class="frm" id="tbl"> <tr><th>ファイル1<div id="image"></div></th> <td> 画像<input id="img_1" type="file" name="image[]" class="fname" onChange=imageChange(this); /><br /> </td></tr> <tr> <th>ファイル2<div id="image"></div></th> <td> 画像<input id="img_2" type="file" name="image[]" class="fname" onChange=imageChange(this); /><br /> </td> </tr> </table> </form> //■phpで以下のコードを実行すると oreach ($_FILES["image"]["error"] as $key => $error) { //複数のファイルをアプロード if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["image"]["tmp_name"][$key]; //テンポラリファイルパス $name = $_FILES["image"]["name"][$key]; //アップロードファイル名 $size = $_FILES["image"]["size"][$key]; //アップロードファイルサイズ $ermsg = $_FILES['image']['error'][$key]; //エラーメッセージ echo "アップロードファイル名".$name."\n" ; echo "アップロードファイルsize" .$size ."\n" ; echo "errmsg= .$ermsg."\n" ; // ファイルアップロード $cnt++; if ( move_uploaded_file($tmp_name, "../1/33/.$cnt."2upload.jpg ")){ //ファイルアップロード echo "アップロード成功 .$ermsg."\n" ; echo "  テンポラリファイル="$tmp_name."\n"; echo "  アップロードファイル="$dir_img."/".$cnt.UPLOAD_FILE_NAME."\n"; } else { echo 1; error_log("upload error! \n", 3, MATCHING_ERROR_LOG); exit; } } } exit; ■結果 アップロードファイル名thum6.jpg アップロードファイルsize=10104 errmsg= 0 アップロード成功   テンポラリファイル=/tmp/phpMvCzgo   アップロードファイル=../1/33/1upload.jpg アップロードファイル名 thum3.jpg アップロードファイルsize=11528 errmsg= 0 アップロード成功   テンポラリファイル=/tmp/php5Q4kIL   アップロードファイル=../1/33/2upload.jpg テンポラリの/tmpは777のため権限に問題ないです php.iniの設定 upload_max_filesize=2m post_max_size=8m memory_limit=128m 今回のアップロードファイルのサイズから問題なし file_uploads=onなので問題ありませんでした これでなにかわかる方いらっしゃいましたら教えてください。

    • ベストアンサー
    • PHP
  • phpでのファイルアップロード

    ファイルのアップロードについてご質問があります。 宜しくお願いします。 基礎phpという本でファイルをアップロードするサンプルがあり、このスクリプトでアップロードされたファイルを格納する『upload』というディレクトリをサーバに作成し、スクリプトを実行して、実際にファイルがアップロードできているかffftpにて『upload』ディレクトリの中を見てみると、なにも表示されませんでした。しかしブラウザから http://myドメイン/upload/ファイル名 にアクセスすると表示されます。 ですのでアップロードはできているがファイルが見えないという状態になっております。また『upload』ディレクトリの削除などもできなくなってしまいます。 サーバの設定が関係しているのかとも思ったのですが、サーバの設定を変更することはできないので、プログラムがわで何とかできないでしょうか? 大変申し訳ありませんが宜しくお願いいたします。 以下がそのコードです。 【up.html】 <html> <head><title>File Uploader</title></head> <body> <form method="post" enctype="multipart/form-data" action="up.php"> <input type="file" name="upfile"> <input type="submit" value="upload"> </form> </body> </html> 【up.php】 <html> <head><title>File Uploader</title></head> <body> <p> file uploader </p> <?php $updir = "./upload/"; $filename = $_FILES['upfile']['name']; if (move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename) == FALSE){ print("Upload failed..."); print($_FILES['upfile']['error']); }else { print("<b>" . $filename . "</b> uploaded!"); } ?> </body> </html>

    • ベストアンサー
    • PHP
  • CGIで日本語名ファイルのアップロード

    日本語名のファイルをアップロードするCGIを教えて下さい。 下記ページを参考にさせていただいて、半角のファイル名はアップロードできております。 http://www.harukaze.net/~mishima/perl/module/upload_by_CGI_pm.html よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ファイルのアップロードについて

    画像ファイルをフォームからアップロードしているのですが どうやっていものかわからないことがあります。 まずは、アップするファイルを選択してもらいファイルサイズや 拡張子チェックに問題がなければ他の項目にエラーがあっても move_uploaded_file関数で一時保存フォルダに画像を保存しています。 一時保存フォルダにアップされた画像は後々タイプスタンプで経過 時間を取得し1日以上経過しているものについては削除するので タイムスタンプの値をファイル名にしています。 全ての項目にエラーもなく確定となった場合にはrename関数で 一時保存フォルダから正式な保存フォルダへファイルを移動しています。 ソースをまとめると // 一時ファイル保存フォルダ $tempdir = '../../upload/temp/'; // 一時保存のファイル名 $mktime = mktime(); $tempname = $mktime . '.jpg'; // ファイル正式保存フォルダ $filedir = '../../upload/image/'; // 正式保存のファイル名 $mictime = microtime(); $filename = substr($mictime, 11) . substr($mictime, 2, 6) . '.jpg'; if (isset($_POST['submit'])) { if ($_FILES['file']['size'] == 0) { // サイズが0なのでエラー } if ($_FILES['file']['error'] == UPLOAD_ERR_OK) { // サイズチェック2 if ($_FILES['file']['size'] > 1024*1024) { // 規定サイズ以上なのでエラー } if (画像に関するエラーがなければ) { // move_uploaded_fileで一時保存フォルダへアップロード } } if (全ての項目にエラーがない場合) { // rename関数で一時保存フォルダから正式な保存フォルダへ移動 } というようにしています。 $_FILEは保持できないので一度でもファイルをアップロードしても 他の項目にエラーがある限りリセットされてしまいサイズが0バイトと なるのでエラーチェックに引っかかり何度も選択しなくてはなりません。 一時保存フォルダに保存されたら再度ファイルを選択しアップロード しない限り他の項目にエラーがあってもファイルのエラーチェックを 通し一時保存フォルダの画像をサムネイル画像としてページ上に表示 させたいのですがどうすればいいのでしょうか? 自分なりに調べてみたのですが参考情報や解決策がみつかりませんでした。 詳しい方がおりましたら宜しくお願い致します!

    • 締切済み
    • PHP
  • ファイルのアップロードが、どうしても どうしても 出来ません・・

    ■アップロードフォーム用のHTMLファイルです↓ ファイル名=gazou_upload.html <html> <head> <title>ファイルのアップロード</title> </head> <body> <form method="POST" action="gazou_upload.php" enctype="multipart/form-data"> <input type="hidden" name="max_file_size" value="1000000" > <input type="file" name="userfile"><br><br> <input type="submit" value="アップロード"> </body> </html> ■受け取ったファイルをサーバ上のディレクトリに移動するPHPファイルです↓ ファイル名=gazou_upload.php <?php // アップロード先ディレクトリ+ファイル名の指定 $uploaddir = '/image/'; $uploadfile = $uploaddir. $_FILES['userfile']['name']; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { print "ファイルアップロード成功"; print_r($_FILES); } else { print "ファイルアップロード失敗"."<br>"; print_r($_FILES); } ?> ■結果 Warning: move_uploaded_file(/image/P1010851.jpg): failed to open stream: No such file or directory in /home/sites/lolipop.jp/users/**********/web/gazou_upload.php on line 8 Warning: move_uploaded_file(): Unable to move '/tmp/phpuqa8g2' to '/image/P1010851.jpg' in /home/sites/lolipop.jp/users/***********/web/gazou_upload.php on line 8 ファイルアップロード失敗 Array ( [userfile] => Array ( [name] => P1010851.jpg [type] => image/pjpeg [tmp_name] => /tmp/phpuqa8g2 [error] => 0 [size] => 84509 ) ) 簡単なプログラムなのにちゃんと動作してくれません。色々試行錯誤試したりしているのですが・・初心者で本当に困ってます。どなたかアドバイスよろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイルのアップロード

    現在下記のような処理を行なおうとしております。 a.php > 入力ページ アップロードするファイルを選択します。 b.php > 確認ページ アップロードするファイルのファイル名を表示します。 c.php > アップロードページ a.phpで選択したファイルをアップロードします。 move_uploaded_fileで実現しようと思っているのですが、b.php → c.phpの タイミングでa.phpで選択したファイルがテンポラリディレクトリから 削除されてしまうため、c.phpでアップロード処理が行なえません。 入力 → 確認 → アップロード といった順で処理を行なう場合、どのような方法を採るのが良いでしょうか。 ヒントでもよいので教えて頂ければと思います。

    • ベストアンサー
    • PHP
  • 画像ファイル(複数)のアップロードについて

    下記方法で画像ファイル(jpg,JPG)をアップロードしますと、 windows7にて、chrome バージョン 36.0.1985.143 m 及びfirefox31では、問題なくアップロード(複数ファイル)できますが、 safari5.1.7ですと、アップロードされたファイルサイズ=0 となってしまいます。 なにか対策あるでしょうか? <form action="http://***/cgi-local/***/upload.cgi" enctype="multipart/form-data" method="POST" id="my_form"> <input type="file" id="files" name="userfile" multiple /> </form> #送信されたfileを受け取る my $query = new CGI; # ファイル名(ハンドル?)の取得 my @filenames = $query->param('userfile'); for my $fn (@filenames) { ... }

  • ファイルのアップロードができません

    今日始めたばかりの初心者です。 PHPだとCGIに比べ、ファイルのアップロードとか画像の処理が簡単に行えそうなのでチャレンジしてみたのですが、いきなりつまづいてしまいました。 とりあえずファイルをアップロードしてみようと思い、下のようなサンプルをアップロードしてみたのですが、さっぱり動きません。 適当なjpgファイルをアップロードすれば、スクリプトのあるディレクトリに”aaa.jpg”という名前で保存すると思うのですが…。 最後の”var_dump($_FILES);”という命令で、アップロードされたファイルの内容を表示させてるはずなのですが、ファイル送信前も後も”array(0) {}”としか表示されません。 PHPのバージョンは4.34です。 どなたかご教授お願いします。 ************************ <form enctype="multipart/form-data" method="post"> Upload File:<input name="userfile" type="file"> <input type="submit" value="Send File"> </form> <pre> <?php if (!empty($_FILES)) { move_uploaded_file($_FILES['userfile']['tmp_name'],'aaa.jpg'); } var_dump($_FILES); ?> </pre> ************************

    • ベストアンサー
    • PHP
  • バイナリファイルのアップロード

    とあるサイトのマルチパートリクエストの使用事例をそのまま使って153KB程度のGIFファイルをアップロード実験してみましたら、処理後ブラウザで「cgi-lib.pl: Request to receive too much data: 153345 bytes 」と表示されアップロードされません。表示の意味と、どうすればアップロードできるかを教えてください。 ● サンプルHTML <html> <head><title>ファイルアップロード</title></head> <body> <form method="POST" action="upload.cgi" enctype="multipart/form-data"> <input type="file" name="upload"> <input type="submit" value="送信"> </form> </body></html> ● サンプルCGI require "cgi-lib.pl"; &ReadParse; $upload = $in{"upload"}; # ファイル内容を取得 $name = $incfn{"upload"}; # ファイル名を取得 $name =~ s/\\/\//g; # パス区切り文字を/に変換 $name = substr($name,rindex($name,"/")+1); # ファイル名のみを取得 if($upload ne "" && $name ne ""){ open(FILE,">$name"); binmode(FILE); print FILE $upload; close(FILE); }

    • ベストアンサー
    • Perl

専門家に質問してみよう