- 締切済み
ファイルをアップロードすると文字化けしてしまう。
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
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- syuuiwsd
- ベストアンサー率56% (17/30)
日本語のエンコードがよくわかりませんが、 1、出力がSJISなのに、charsetをeuc-jpにして本当にいいですか? 2、mb_convert_encodingの二番目の引数をsjisなどで明示したほうがいいでしょうか。 3、kakuninn.phpで$image1は確かに文字列ですか?
お礼
エンコードの変換を変えてみたらできました。ありがとうございました。
補足
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でやりたいと思っております。よろしくお願い致します。