• 締切済み

ファイルをアップロードすると文字化けしてしまう。

PHP初心者です。カテゴリで同じような質問を捜したのですが見つからず、質問させて頂きました。よろしくお願い致します。 windowsXPでPHP4.4.4+MYSQL+Apacheを使用しており、PHPの内部コードはEUC-JPで出力はSJISです。 写真のアップロードとコメントをつけたいと思い本を見ながら↓を作成したのですが、 写真(ファイル名)&コメントをブラウザで表示すると文字化けしてしまって困っております。 どうすれば文字化けせずに表示できるようになるか教えて頂ければと存じます。 ※up.php(写真の選択&コメントをする画面です) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>登録</title> </head> <body> <form action="kakuninn.php" name="make1" method="post" enctype="multipart/form-data"> <p> <input name="image1" size="40" type="file"> <input type="image" name="image_up" src="../img/upload.gif" alt="アップロード"> </p> <p>コメント</p> <p> <input name="kome" type="text" value="" maxlength="50"> </p> <p> <input type="submit" name="Submit" value="送信"> </p> </form> </body> </html> ※kakuninn.php(ファイル名とコメントを確認する画面です。) <?php print("文字コード(画像):".mb_convert_encoding($image1,"auto")."<br>"); print("文字コード(コメント):".mb_convert_encoding($kome,"auto")."<br>"); print("画像:".$image1."<br>"); print("コメント:".$kome."<br>"); ?> 例えば、写真欄に「写真1.jpg」、コメント欄に「コメント」として、送信ボタンを押すと↓の結果となります。 文字コード(画像):C:\WINDOWS\php24A.tmp 文字コード(コメント):?R?????g 画像:C:\WINDOWS\php24A.tmp コメント:?R?????g

  • PHP
  • 回答数1
  • ありがとう数2

みんなの回答

  • syuuiwsd
  • ベストアンサー率56% (17/30)
回答No.1

日本語のエンコードがよくわかりませんが、 1、出力がSJISなのに、charsetをeuc-jpにして本当にいいですか? 2、mb_convert_encodingの二番目の引数をsjisなどで明示したほうがいいでしょうか。 3、kakuninn.phpで$image1は確かに文字列ですか?

php_bigin
質問者

お礼

エンコードの変換を変えてみたらできました。ありがとうございました。

php_bigin
質問者

補足

syuuiwsdさん ご回答ありがとうございます。 >1、出力がSJISなのに、charsetをeuc-jpにして本当にいいですか? 本をみながら作成しているのですが、EUCでphpを作成したほうがSJISよりいいような風に書かれていたのでEUCで作成しております。他の作成したページは問題なく表示されているので、できればEUCのままでやれればと思っております。 >2、mb_convert_encodingの二番目の引数をsjisなどで明示したほうがいいでしょうか。 はい。できれば『kakuninn.php』で画像といっしょにコメントも表示したいと思っており、文字化けしない表示(できればSJIS)で表示したいです。(別のページで表示する形でも問題ありません。) print("エンコード名(コメント):".mb_detect_encoding($kome,"auto")."<br>"); というのを『kakuninn.php』に書いてみて、エンコードを調べてみたのですが、SJISと表示され、ブラウザ(IE6)の表示も自動選択とSJISにマークがついておりますが、文字コード(コメント):?R?????gの表示となってしまっております。 >3、kakuninn.phpで$image1は確かに文字列ですか? 文字列かどうかというのを調べる方法がわからないのですが、C:\WINDOWS\php24A.tmpという形で一時的に保存しているので問題はないと思っておりました。 enctype="multipart/form-dataをぬくと、文字化けはしなくなるのですが、『画像』の拡大縮小ができなくなり(ファイルが存在しないと判断され拡大縮小ができない)ますが、『コメント』は文字化けしなくなりました。 エンコードを変換しようとして mb_convert_encoding($kome,"EUC-JP","SJIS"); mb_convert_encoding($kome,"SJIS","EUC-JP"); というのもkakuninn.phpに書いてみたのですが、文字コード(コメント):?R?????gの表示のままでした。(2つ同時ではなく片方をコメント化して1つずつ試してみました) 初心者なので的外れな補足となってしまっていたら申し訳ありません。 できる事ならば、画像の拡大縮小をするためにPHP=EUCで記載し、ブラウザの表示をSJISでやりたいと思っております。よろしくお願い致します。

関連するQ&A

  • ファイルのアップロードで文字化けします

    ファイルのアップロードを行うと特定文字以降の名前が消えてしまいます。 (予、表など2バイトコードに5Cが含まれる文字) コードは下のように書いています。 <form enctype="multipart/form-data" action="upload_fnc.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="30000"> <input name="userfile" type="file"> <input type="submit" value="Send File"> </form> サーバの動作環境はLinux(FedoraCore3)、Apache2.0.52、PHP4.3.10です。 クライアント側はほとんどがWindows(2000、XP)です。 どのようにして対処すればよいか分からなく困っています。 どなたかお分かりの方がいらしたら教えてください。 よろしくお願いいたします。

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

    PHP初心者です。以下のスクリプトを参考書を参考に記述しました。リンクでtmpfileが表示されるのはわかるのですが、このファイルに画像を表示するにはどうしたらいいですか?<img src="">で表示されなかったので、他に表示方法はあるのですか?また画像を表示したときにimagecopyresampled();を使ってサイズを設定したいと思っています。 <?php print <<<HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> <title>ファイルのアップロード</title> </head> <body> <p>ファイルのアップロード</p> <form method="post" enctype="multipart/form-data" action="index.php"> <input type="hidden" name="maxfilesize" value="10000" /> アップする写真データ<br> <input size="30" type="file" name="upfile" /><br /> <input type="submit" name="submit" value="送信" /> <input type="reset" name="reset" valuie="リセット" /> </form> HTML; if($submit !=""){ if($submit == "none"){ print"ファイルのアップロードができませんでした。"; exit; } copy($upfile,"tmpfile.txt"); print"アップロードされたファイルの情報<br>"; print"ファイル名:$upfile_name<br>"; print"ファイルサイズ:$up_size<br>"; print"ファイルタイプ:$up_type<br>"; print"<a href=\"tmpfile\">ファイルへリンク</a><br>"; } print <<<HTML </body> </html> HTML; ?>

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

    fedora7、PHP5、Mysql5を使っています。 画像ファイルやコメント、タイトル等を<form method="POST" action="regchk.php">で、渡すreg.phpファイルと、それお受け取り画像ファイルサイズやコメント文字数等をチェックするregchk.phpファイルがあります。 reg.phpの<form >部分が、 <form method="POST" action="regchk.php" enctype="multipart/form-data"> <table > <tr> <th>写真のファイル</th><td><!-- MAX_FILE_SIZE must precede the file input field --> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> <input type="file" name="uploadfile" size="60"></td> </tr> <tr> <th>タイトル </th><td><input type="text" name="title" size="60" maxlength="50"></td> </tr> <tr> <th>コメント </th><td><textarea rows="7" cols="60" name="comment"></textarea></td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" name="reg" value=" 登録 "> <input type="reset" value=" クリア "> </td> </tr> </table>  </form>です。 そして、regchk.php の$_POST['uploadfile'] で、画像ファイルがアップされているか、チェックしたいのです。以下のように。 $uploadfile = $_POST["uploadfile"]; echo $uploadfile."<br>"; ----→空白が表示される //エラーコード 検証用 echo $_FILES['uploadfile']['error']."<br>"; ---→ 0が表示される echo $_FILES['uploadfile']['tmp_name']."<br>"; --→ /usr/tmp/phpアルファベット echo $_FILES['uploadfile']['size']."<br>"; ----→9894 //入力データのチェック $errmsg = ""; if (strlen($uploadfile) == 0) { $errmsg .= "写真のファイルが指定されてません.<br />"; } ↑このif文でエラー文字列が、$errmsg に入る。 アパッチのerror_logを見ると、 Notice: Undefined index: uploadfile in /home/user1/public_html/regchk.php on line 5, と、出ており、5行目とは $uploadfile = $_POST["uploadfile"]; のことです。 自分は、やり方が根本的に間違っているのでしょうか? ご教授の方、よろしくお願いします。

    • ベストアンサー
    • 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 if (move_uploaded_file($_FILES['userfile']['tmp_name'], "/image/")) { print "ファイルアップロード成功"; print_r($_FILES); } else { print "ファイルアップロード失敗"."<br>"; print_r($_FILES); } ?> ■ファイルを保存するディレクトリ 上のファイルと同じ階層で フォルダ名が image パーミッションは3つとも 707 にしました。 パーミッションが拒否されたというメッセージだと思うので、パーミッションを変更したのですがダメでした・・ちなみにサーバはロリポップを使っていて、777と666はエラーになると注意書きがあったので、707にしました。かなりハマっていて困っています。回答もしくはアドバイスをどなたかよろしくお願いします。

    • ベストアンサー
    • 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
  • フォーム INPUTの文字化け対策の対処方は?

    チェックボックス(趣味のリスト)のチェック有無を配列で受けていますが、"パソコン"の文字が"パソ\コン"に文字化けしてしまいます。対処方法をお教えください。 <?php mb_language('Japanese'); $hobby=@implode(" ",$_POST[hobby]); echo $hobby; ?> <FORM action="<?=$_SERVER[PHP_SELF]; ?>" method="post" > <INPUT type="checkbox" name="hobby[]" value="旅行" >旅行<BR> <INPUT type="checkbox" name="hobby[]" value="温泉" >温泉<BR> <INPUT type="checkbox" name="hobby[]" value="ゴルフ" >ゴルフ<BR> <INPUT type="checkbox" name="hobby[]" value="パソコン" >パソコン<BR> <INPUT type="checkbox" name="hobby[]" value="ドライブ" >ドライブ<BR> <INPUT type="checkbox" name="hobby[]" value="写真" >写真<BR> <INPUT type="submit" name="submit" value="送信"><BR> <INPUT type="reset" name="reset" value="RESET"> </FORM>

    • ベストアンサー
    • PHP
  • 文字列(×と÷)の文字化けについて

    phpを勉強している初心者です。 2つのテキストボックスを作って、 各数値を「架ける」または「割る」計算処理ができるように記述しています。 index.phpのフォーム部分は下記のようになっています。 <form method="post" action="test.php"> 入力欄1:<input type="text" name="number1"><br> <input type="radio" name="kigou" value="×">× <input type="radio" name="kigou" value="÷">÷<br> 入力欄2:<input type="text" name="number2"><br> <input type="submit" value="計算"> </form> test.phpの処理部分は下記のようになっています。 <?php if($_POST["kigou"] == "×" ){ $answer=$_POST["number1"]*$_POST["number2"]; }elseif($_POST["kigou"] == "÷" ){ $answer=$_POST["number1"]/$_POST["number2"]; } print $_POST["number1"].$_POST["kigou"].$_POST["number2"]."=".$answer; ?> しかし、結果では、記号部分が文字化けしてしまいました。 (例:4テ4=16、4テキ4=1) HTMLの特殊記号を試しに設定してみましたが 計算すらしてくれなくなりました。 (&times;と&divide;) こんな場合、どうすれば良いのでしょうか? また、if分の条件式にはHTMLの特殊記号は使えないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 特定の文字が文字化けします

    こんにちは。 とても困ってます。 例えば、phpで echo "<P><FORM ACTION=\"main.php\">"; echo "<METHOD=POST>"; echo "<INPUT TYPE=HIDDEN NAME=res VALUE=\str_request\">"; echo "<INPUT TYPE=HIDDEN NAME=action VALUE=post>"; echo "<TEXTAREA NAME=\"str\" ROWS=\"8\" COLS=\"50\"></TEXTAREA>"; echo "<INPUT TYPE=\"submit\" VALUE=\"send">"; echo "</METHOD></FORM></P>"; と記述して「send」ボタンを押下して文字列をPOSTした場合、 受け取った文字($str)の特定の文字が文字化けします。 特定の文字とは、「る」「れ」「ろ」などです。 どなたか原因がわかる方いらっしゃらないでしょうか?

    • 締切済み
    • PHP
  • PHPでファイルアップロードがうまくいきません

    PHP初心者なんで宜しくお願い致します。 ファイルアップロードのシステムを作っているんですが どうもうまくいきません。 <form action="<? $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> 写真:<input type="file" name="file" size="40" /> <input type="submit" name="new_write" value=" 登録 "> </form> <? if(isset($_POST['new_write'])){ $filename = $_FILES['file']['name']; $updir = "./image/".$filename; if(move_uploaded_file($_FILES['file']['tmp_name'], $updir)){ print "OK"; }else{ print "NG"; } } ?> 上記の記述をしています。 そしてphpinfo()で情報を確認しても file_uploadsはONになっています。 そしてPHPのバージョンは4.4.2です。 単純なことかもしれませんが、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpに関する質問

    phpでフォームに入力して送信ボタンを押したらアンケートの集計をphpの方に出力するプログラムを作っているのですがhtmlのほうは問題なく動くのですがphpのほうが入力したものが反映されなくて非常にこまっていますどなたかたすけてください ここからhtml <html> <p> </p> <h3>アンケート</h3> <form name="form" action="kadai.php" method="GET"> <p> お名前を入力して下さい:<br> <input type="text" name="simei"> </p> <p> 性別を選んで下さい。<br> <input type="radio" name="gender" value="男性">男性です<br> <input type="radio" name="gender" value="女性">女性です<br> </p> <p> この~を何で知りましたか?<br> <input type="checkbox" name="check1" value="メディア媒体"/> メディア媒体で<br> <input type="checkbox" name="check2" value="イラスト"/> イラストで<br> <input type="checkbox" name="check3" value="その他"/> その他<br> </p> <p> 最近ハマっていることは?<br> <input type="checkbox" name="check4" value="サークル、部活"/> 部活など<br> <input type="checkbox" name="check5" value="得にない"/> 得にない<br> <input type="checkbox" name="check6" value="その他"/> その他<br> </p> <p> <input type="submit" name="submit" value="上記内容で送信"> </p> </form> </body> </html> ここからphp <html> <p> </p> <h3>アンケート</h3> <p> <b>下記の内容でお問合せを受付けました。<br> ありがとうございました。</b> </p> <p> <b>お名前:</b><br> <?php print( $_REQUEST["simei"] ); ?> </p> <p> <b>性別:</b><br> <?php print( $_REQUEST["gender"] ); ?> </p> <p> <b>この~を何で知りましたか:</b><br> <?php print( $_REQUEST["check1"] ); ?><br> <?php print( $_REQUEST["check2"] ); ?><br> <?php print( $_REQUEST["check3"] ); ?><br> </p> <p> <b>最近ハマっていることは:</b><br> <?php print( $_REQUEST["check4"] ); ?><br> <?php print( $_REQUEST["check5"] ); ?><br> <?php print( $_REQUEST["check6"] ); ?><br> </p> <p> </body> </html>

    • ベストアンサー
    • PHP