We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 20953
    • 70 Posts
    PHPどころかシステムにも疎い初心者です。
    標準スニペットのContactFormから送ったメールが文字化けしてしまいます。多分、文字コードの問題だと思うのですが、これを回避する方法はありませんか?
    または、他のスニペットで回避出来るものはありませんか?
    サーバーはxreaを使用しています。宜しくお願い致します。
      • 29228
      • 109 Posts
      とりあえず、
      if (mail($to, $subject, $body, $headers)) {

      って書いてある所を
      if (mb_send_mail($to, $subject, $body, $headers)) {

      として試してみてください。

      ちなみに、これだけだと不完全な状態です。
      とりあえずこれを試してみて、送られてきたメール本文とヘッダー情報を教えてください。
      海外製CMSでは、メール送信で文字化けはデフォだと思ってください。 grin
      mail()を使ってるだけなので、文字化けの修正は簡単だと思います。
      自分はまだそこまでサイトを構築する状態じゃないので、試していませんが問題視してません。
        • 33488
        • 429 Posts
        mb_send_mailの前に以下も追加しちゃってください。
        mb_language("ja");
        


        ついでに多分FROMが日本語だと化けると思うので、したのように修正しないと駄目かも
        $headers = "From: ".mb_encode_mimeheader($from)."<$from_email>\r\n";
        

        あ、ちなみにmb_languageはheadersより前の行に入れないと駄目です。

        実際やってみてないのですが、多分、本文と題名はmb_send_mailでいけると思います。

          • 20953
          • 70 Posts
          ご教授頂き有り難うございます。
          さっき、打ち合わせから帰って来れたので、早速試させて頂きました。
          Quote from: takumi at Mar 16, 2006, 09:34 AM

          if (mb_send_mail($to, $subject, $body, $headers)) {

          として試してみてください。
          で、本文で日本語が通るようになりました。
          また、Fromの部分は
          Quote from: takiz at Mar 16, 2006, 10:42 AM

          $headers = "From: ".mb_encode_mimeheader($from)."<$from_email>\r\n";
          

          で日本語表示にすることができました。ただ、
          mb_language("ja");
          

          に変更するとエラーが出ます。入れるところを間違ったのでしょうか…
          if (mb_send_mail($to, $subject, $body, $headers)) {

          のところを
          if (mb_language("ja");mb_send_mail($to, $subject, $body, $headers)) {

          にすると言う意味ですよね?

          一応、テストメールでは文字化けは無くなったので問題はなくなったのですが、もし間違っている様なご指摘を頂ければ幸いです。

          私の様な初心者に分かりやすく教えて頂き感謝しています。有り難うございました。
            • 29228
            • 109 Posts
            Quote from: naoya at Mar 16, 2006, 07:07 PM

            if (mb_send_mail($to, $subject, $body, $headers)) {

            のところを
            if (mb_language("ja");mb_send_mail($to, $subject, $body, $headers)) {

            にすると言う意味ですよね?
            残念ながら使い方が違います。
            takizさんが言ったのは、mb_send_mai()が含まれている行のって意味です。
            うちのサーバーはこの設定をしなくてもmb関数が日本語設定になってるので問題ないのですが、mb_send_mail()関数はmb_language()を参照して言語を決るので、この設定がされてないサーバーでは、スクリプト側で言語設定しないと文字化けの問題が解消されない場合があります。
            ただ今回はmb_language()を設定しなくとも問題無くメールが送信されたようなので、設定しなくとも良いかも知れません。
            加えるならスクリプトの先頭の方で問題無いと思います。

            今思い出したんですが、xreaサーバーってmb_language()の記述は必須だったような?
            mamboの文字化け対策で使った記憶があります。
            でも、今回は大丈夫みたいなんでxreaでもサーバーによって違うみたいですね? huh
              • 33488
              • 429 Posts
              takumiさん、フォローありがとうございます。
              その通りに、前ですので
              mb_language("ja");
              $headers = ・・・・ 略

              という感じですね。
              takumiさんがおっしゃるように、入れなくても大丈夫そうですので、なくてもかまわないかと思います。

              日本のサブフォーラムができそうですねぇ  smiley 
                • 29228
                • 109 Posts
                Quote from: takiz at Mar 17, 2006, 11:19 AM

                日本のサブフォーラムができそうですねぇ  smiley 
                なぜかここで反応。 grin
                ですねぇ~。
                完全日本語でのフォーラムも欲しい所です。
                ここはある程度の知識人の方には良いと思うんですが、自分のように初心者には敷居が高いです。(^^;
                それと日本人ユーザーも増えてくれないと、有益な情報も得難いし。
                って、このスレッドで話す話題じゃないですね。。。 lipsrsealed
                  • 33488
                  • 429 Posts
                  Quote from: takumi at Mar 17, 2006, 01:44 PM

                  Quote from: takiz at Mar 17, 2006, 11:19 AM

                  日本のサブフォーラムができそうですねぇ  smiley 
                  なぜかここで反応。 grin
                  ですねぇ~。
                  完全日本語でのフォーラムも欲しい所です。
                  ここはある程度の知識人の方には良いと思うんですが、自分のように初心者には敷居が高いです。(^^;
                  それと日本人ユーザーも増えてくれないと、有益な情報も得難いし。
                  って、このスレッドで話す話題じゃないですね。。。 lipsrsealed
                  さらに追い撃ちにもこのレスに反応しちゃいました。
                  eastbindさんにお任せぇ と思って、eastbindさんのHPを見たら、どうやらモデレータ3人集まらないと・・
                  なんだそうです。
                  takumiさん、モデレーターになっちゃうとあとひとりなんですけど?(^^;;
                  ほかのひともどうですか?

                  英語弱いからなぁ おいら・・・ちょっと頼りないσ(^_^)。

                  このサブフォーラムの話が、rthrashさんからなかったら、ちょっとした簡易掲示板的なものをHPに作ろうかと思っていたのですが、やはり本家に日本フォーラムがあるといいですよねぇ
                    • 29228
                    • 109 Posts
                    Quote from: takiz at Mar 17, 2006, 03:49 PM

                    takumiさん、モデレーターになっちゃうとあとひとりなんですけど?(^^;;
                    ほかのひともどうですか?
                    さらにさらに追い討ち! grin
                    (naoyaさんゴメンなさい)
                    自分は無理ムリ・・・(^^;
                    自分もそこまで英語が理解出来てないですよ。
                    eastbindさんともう一人英語が堪能な方がいれば、緊急時になんとかなると思うので、最後はスキルのある方(英語が話せなくても)がやれば良いと思いますよ。
                    自分は両方とも欠けてるので不可です。 laugh
                    って言うか、日本人ユーザーが少ないので選択枠は限りなく少ないのですが。(^^;

                      • 8382
                      • 253 Posts
                      naoyaさん
                      お使いのPHPのバージョンによっては、mb_send_mail()でも文字化けが発生する事があります。
                      http://d.hatena.ne.jp/t_komura/20051105
                      の「mb_encode_mimeheader() が正常に動作しない問題」以下を参照ください。
                      4.4.2あるいは5.1.0以降ならば問題ありません。もしもそれ以外のバージョンの場合、
                              $body = "Name: $from\nEmail: $from_email\nMessage:\n\n" . $message;
                              if (mail($to, $subject, $body, $headers)) {

                      の部分を以下のようにしてみてください。
                              $body = "Name: $from\nEmail: $from_email\nMessage:\n\n" . $message;
                              $subject = mb_encode_mimeheader(mb_convert_encoding($subject, "JIS"), "ISO-2022-JP", "B");
                              $body = mb_convert_encoding($body, "JIS");
                              $headers .= "Mime-Version: 1.0\r\n";
                              $headers .= "Content-Type: text/plain; charset=ISO-2022-JP\r\n";
                              $headers .= "Content-Transfer-Encoding: 7bit\r\n";
                              $headers = mb_encode_mimeheader(mb_convert_encoding($headers, "JIS"), "ISO-2022-JP", "B");
                              if (mail($to, $subject, $body, $headers)) {


                      takizさん、takumiさん。
                      日本語フォーラムの件は慌てなくてもいいと思ってます。
                      他の言語でもまだ動きは鈍いようですし、適任者が現れるまで気長に待ちましょう。
                      私なんか英検3級で、PHPは去年始めたばかりです。大した人間じゃないです。