• ベストアンサー
  • すぐに回答を!

緊急です!文字コードの設定ミスでメールが読めません。

お世話になっております。 自分のHPで自作phpのお問い合せフォームを使っているのですが、普段UTF-8でフォームのファイルを、何の拍子にか間違ってSJISで保存していたらしく、送られてきた文字が内容だけ文字化けしてしまいました。 この文字化けを元に戻す方法はないのでしょうか? プログラムの流れは、 contact.php←問い合わせフォーム表示 ↓ form.php(←メッセージの送信プログラム。これを間違ってSJISで保存していた) メッセージの文字は以下のようにエンコードしなおしてあります。 $message=i18n_convert(str_replace("\t","\n",str_replace("<br />","",$message)),'JIS','UTF-8'); ↓ 着信 いったんJISコードで保存後、utf8に読み直して、再度SJISに読み直すなどやりましたが、結局読めませんでした。 内容が読めずに非常に困っています。。 どなたか対処法をご存じないでしょうか??

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数92
  • ありがとう数1

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

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

落ち着いて考えますと処理的には UTF8 → JIS エンコードされただけのはずなので JIS→UTF8 のエンコードを実行したものを SJIS で開けば表示されるはずです。 ただしメールソフトで開いている場合は JIS→システム文字コード(windows は SJIS) に 変換されてしまっている可能性もありますので システム文字コード→JIS→UTF8 と 変換したものを SJIS で開けば表示されるかもしれません。 ですからSJISコードで保存後、JISに読み直して、UTF8に読み直して、再度SJISで 読み直してみてください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

今までお礼せずに申し訳ありません! なんとか本文を読める程度に復元できました。 本当に有難うございました。

関連するQ&A

  • PHPの文字コード変換について

    PHPで mb_convert_encodingを用いて UTF-8で記述されたPHPスクリプトファイルの PHPファイル内の任意の文字列の文字コードを変換する場合、 $value = "文字列"; $str = mb_convert_encoding($value ,"UTF8","UTF8"); print $str; この場合、特に問題なく、変換がおこなわれます というか、意味のないで処理ではありますが。 次に $str = mb_convert_encoding($value,"EUC-JP","EUC-JP"); とした場合 うまく文字列の文字コードの変換がおこなわれず 出力内容は文字化けします。 次に $str = mb_convert_encoding($value,"SJIS","SJIS"); とした場合 EUC-JPと同じく文字コード変換に失敗し 文字化けするだろうとおもいましたが おもいのほかブラウザの文字コードUTF-8のままで文字化けしていないのです。 これはどういう現象でしょうか? たとえば一つ目は UTF8で記述されたPHPファイルの文字列をそのままUTF-8として 変換されせるのですから、問題ないはずです。結果問題ありません。 二つ目は UTF-8でかかれたPHPファイルの文字列をEUC-JPでかかれたファイルとして EUC-JPという文字コードに変換しなさいという命令ですよね? これは思う通りにいかなくて文字化けした文字列が出力されるのはわかるのですが 三つ目はUTF8で記述された文字列をSHIFT-JISとしてSHIFT-JISに変換しようとしているにも かかわらず、結果問題なくブラウザのUTF-8で文字列と表示されてしまいます。 これはいったいどういう事なのでしょうか? これが仮に $str = mb_convert_encoding($value,"SJIS","UTF-8"); なら話は簡単んです。 UTF-8で記述されたファイルの任意の文字列を UTF8からSJISに変換しようとしているのですから問題なく SHIFT-JISでエンコーディングされた文字列が帰ってくるはずです。 こ乃原因をご存知のかたよろしくご教授ください。 お願い致します。

    • ベストアンサー
    • PHP
  • PHP+MySQL エンコード

    文字コードについて教えて下さい。 データベースMySQL の文字セット: UTF-8 Unicode (utf8)に固定。 htmlはSIFT-JISで表示。 フォームで受けとったデータをPHPからDBに書き込む場合 i18n_convert($data,"UTF-8", "SJIS"); をして書き込めば問題ないでしょうか? DBがEUCの場合は問題なかったのですが、UTF-8は初めて 扱うため、文字化けの不安があります。 いまいち、文字コード(バイト数の違いなど)が理解できておりません。 ご教授お願い致します。

    • 締切済み
    • PHP
  • 文字コードの検出が正しいかを検証する方法

    PHPの mb_detect_encoding 関数を使っているのですが、 文字エンコーディングの検出が間違っていないかを検証する為に、 以下のように、検出された文字コードに戻し、元の文字列と一致するかで、 検出された文字エンコーディングが正しかったか確認しています。 $str = file_get_contents ( $url ); $moji_code = mb_detect_encoding ( $str , "ASCII,JIS,UTF-8,eucJP-win,SJIS-win" ); $str_after = mb_convert_encoding ( $str , 'UTF-8' , $moji_code ); if ( $str !== mb_convert_encoding ( $str_after , $moji_code , 'UTF-8' ) ) {     //文字化けしている可能性あり } これで、完璧でしょうか?

    • ベストアンサー
    • PHP
  • 携帯からメールを送ると文字化け・・・

    PCからメールを送ると正常に表示されてるのに、携帯からだと内容が化けてしまうという現象になってしまいました・・・。 function sendmail($to,$from,$from_name,$title,$message){ /* JISコードへのエンコーディング */ $to = mb_convert_encoding($to, "JIS","EUCJP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $from = mb_convert_encoding($from, "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $title = mb_convert_encoding($title , "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $message = mb_convert_encoding($message , "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); /* 改行コード変換(CR+LFへ変換) */ $to = ereg_replace("\r", "", $to); $to = ereg_replace("\n", "\r\n", $to); $from = ereg_replace("\r", "", $from); $from = ereg_replace("\n", "\r\n", $from); $from_name = ereg_replace("\r", "", $from_name); $from_name = ereg_replace("\n", "\r\n", $from_name); $title = ereg_replace("\r", "", $title); $title = ereg_replace("\n", "\r\n", $title); $message = ereg_replace("\r", "", $message); $message = ereg_replace("\n", "\r\n", $message); /* メールヘッダ生成 */ $header = "From: ".$from_name." <".$from.">\n"; $header .= "Reply-To: ".$from_name." <".$from.">\n"; /* メール本文生成 */ $message = mb_convert_kana($message,"KV"); /* 送信メッセージ言語設定 */ mb_language("Japanese"); /* メール送信処理 */ $rcd = mb_send_mail($to,$title,$message,$header); 分かる方いらっしゃいましたら、よろしくお願いしますm(__)m

    • ベストアンサー
    • PHP
  • JAVA 文字コード変換

    こんにちは。 JAVAの文字コード変換のところで教えて頂きたい所があります。 はしご高(髙)  の文字をUTF-8からJISコードに変換してテキストファイルに書き込んでいるのですが、文字化けして"?"という文字になっています。 "髙"の文字をUTF-8からJISコードに変換の仕方のコーディング方法を教えて頂けないでしょうか。 現在下記の様に変換を行って書き込んでいます。  String str = "髙";  byte[] buf = str.substring(0, 1).getBytes("JIS0208"); OS:WindowsXP DB:Oracle10g  宜しくお願い致しますm(__)m

    • ベストアンサー
    • Java
  • コピーすると文字コードが変わっちゃう

    プログラムを(ちなみにPHP)エディター(ちなみに秀丸)で入力して保存時にエンコードの種類を「Unicode(UTF-8)」で保存 もちろんプログラム(HTML/PHP記述)では <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> を指定しています 実行すると文字化けも起こらず正常にホームページが完成しました それをコピーして別のサーバーにアップすると正常にホームページが開かないんです 文字化けだけでなくソースが画面に表示されました そのソースも文字化けです コピー先をエディターで開くと「日本語(Shift-JIS)」になっていました コピー元は「Unicode(UTF-8)」です なぜでしょう? そもそも「Unicode(UTF-8)」をコピーするには単純にコピーしてはいけないのでしょうか? プログラムの量が結構あるのでこの「日本語(Shift-JIS)」を一括して「Unicode(UTF-8)」に保存できるようなツールはないのでしょうか?

  • MySQL4.1 文字コードについて

    MySQL4.1を導入したのですが一部文字が入力できないときがあります。 MySQL4.0の時は不具合はおきませんでした。 MySQLのキャラクタセットはすべてsjisに設定しました。 character_set_client sjis character_set_connection sjis character_set_database sjis character_set_results sjis character_set_server sjis character_set_system utf8 MySQL・phpでサイトを構築しているのですが 入力フォームで文章が「ソ」「表」で終わると、登録に失敗します。 shift-jisの特殊文字ですので「ソ\」「表\」のようになり、SQL文のシングルコーテーションが文字列(\')と認識されると思うので下記置き換えで大丈夫かと思いましたが、また失敗しました。 $text = str_replace("\\","\\\\",$text); $text = str_replace("'","\'",$text); MySQL4.1はホントに難しいです… お分かりになる方いましたらよろしくお願いします。

    • ベストアンサー
    • MySQL
  • includeファイルの文字コードについて

    お世話になります。 PHPでのincludeファイルのことで考えています。 SJISコードで保存されたファイルを、EUCで書かれ ましたPHPプログラムで、文字化けをせずに読み込む 事は可能なのでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • str_replace()で文字化け

    str_replaceについておしえてください。(IE6,php4.3.7,sjis環境) str_replace('','',$str) で$strの中に'能'という文字があると'能\'になってしまいました。 そこで str_replace('能\','能',$str); とすると今度はエラーになりました。 どうすれば化けなくなるでしょうか?

    • ベストアンサー
    • PHP
  • 再度文字コードについて

    前回文字化けについて質問させていただいたのですが、うまく解決しなかったためまた質問させていただきます。 まず、テーブルの文字セットはシフトJISに無事変更することができました。しかしやはりset names sjisをおこなうとうまくいきません。それをおこなわない場合は文字化けせずにうまくいきます。 MySQLのデフォルト文字セットはlatin1になっているのですが、この場合 クライアントからSQLへsjis→latin1→sjisのような変換がおこなわれているのでしょうか?set names sjisはクライアントがsjisであるということをMySQL側に明示しているだけなんですよね? PHPの文字セットがシフトjisなのにset names sjisでうまくいかずset names latin1でうまくいくのがどうもよくわからないのですが…… 度々すいませんが、わかるかたお願いします。