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

締切り済みの質問

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

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

投稿日時 - 2007-07-26 20:32:38

QNo.3202132

すぐに回答ほしいです

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

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

回答(1)

ANo.1

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

投稿日時 - 2007-07-27 01:15:42

補足

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でやりたいと思っております。よろしくお願い致します。

投稿日時 - 2007-07-27 11:38:50

お礼

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

投稿日時 - 2007-07-27 23:02:58

あなたにオススメの質問