• ベストアンサー

メール送信プログラムで特定文字の文字化け

PHP初心者です。メール送信プログラムを作成しました。 色々調べて、 //表・予・申・能・十・ソなど特殊漢字の後につく\マークを削除 変数 = stripslashes(変数); でエンマークはとれたのですが、また新たな問題が発生してしまいました。 例えば、山本という名前でフォーム入力すると本という文字が文字化けしてしまいました。送信者名は文字化けしていないのにメールの中身の本という文字が文字化けしてしまいました。どなたか助けてください。

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

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

  • ベストアンサー
  • nataruy
  • ベストアンサー率52% (19/36)
回答No.2

真ん中下あたりの >$s_msg = mb_convert_encoding($s_msg,"JIS","SJIS"); ここでJISコードに変換しているにも拘らず、その下の >$s_msg = stripslashes($s_msg); で本来は必要な'\'を取り除いてしまっているのです。 「本」のJISコードは0x4b5c、つまり"K\"ですから当然コードが変化してしまいます。 送信者名が化けないのは、この処理を$from対して行っていないためです。 変数内の文字コードと文字列の状態を理解しながらプログラミングすると良いでしょう。 それと、マルチバイトメール送信関数 >mb_send_mail($sendto, $subject, $s_msg, $from); では、本文及び標準のヘッダに含まれるSubjectは"内部文字エンコードで渡し"ます。 追加ヘッダ($from)は"メール用にエンコード"した上で、適切なフォーマットで渡します。 追加ヘッダのエンコードにはmb_encode_mimeheader()を使えば、メール向けの適切なフォーマットで返してもらえます。

参考URL:
http://jp2.php.net/manual/ja/function.mb-send-mail.php,http://jp2.php.net/manual/ja/function.mb-encode-mimeheader.php
masamasu
質問者

お礼

ありがとうございます。数日前にこれに気づき解決いたしました。 でもひとつひとつ関数の意味を理解していなかったのでnataruyさんのご回答でなぜそうなったのかようやく意味がわかりました。本当にありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

どういう処理をいれているのでしょうか? 送信者や件名などはISO-2022-JP形式、 本文は7bitJIS形式にきちんと変換していますか?

masamasu
質問者

補足

早速のご回答ありがとうございます。 以下の内容でメール送信しています。ちなみにこの上でfopenでlogを残していますがそちらには文字化けせず残されているのでメール送信用プログラム内で何か追加しなければいけないんだと思いますが、調べていても答えがみつかりません。お願いします。 //----------------ここから管理者宛にMAIL送信------------------------// $subject="お問い合わせがありました!"; $subject=mb_convert_encoding("$subject","JIS","SJIS"); $subject=mb_encode_mimeheader($subject); //表・予・申・能・十・ソなど特殊漢字の後につく\マークを削除 $content = stripslashes($content); $name = stripslashes($name); $s_msg="以下の内容でお問い合わせ・資料請求がありました。 迅速な対応をお願いいたします。\n _/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n ■お名前:${name} ■ふりがな:${name2} ■メール:${e_mail} ■生年月日:${birth_year}年${birth_month}月${birth_day}日 ■お問い合わせ:\n${content01}\n _/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n |お問い合わせフォーム|\n \n"; $s_msg = mb_convert_encoding($s_msg,"JIS","SJIS"); mb_internal_encoding("SJIS"); mb_language("Japanese"); $from="${name}"; $from=mb_convert_encoding("${from}","JIS","SJIS"); $from = base64_encode($from); $from = "=?ISO-2022-JP?B?" . $from . "?="; $from = "From: \"".$from. "\"" . "<" . "$e_mail" . ">"; //表・予・申・能・十・ソなど特殊漢字の後につく\マークを削除 $s_msg = stripslashes($s_msg); mb_Language('Japanese'); $sendto = "midori@mosk.co.jp"; mb_send_mail($sendto,"$subject","$s_msg","$from"); //-------------------------------------------------------------------------------------//

関連するQ&A

  • メール送信時文字化けする

    ASP.NETでWebアプリケーションを開発しています。 Web上のフォームから入力された内容を、メール送信させたいのですが、メール送信自体はうまくいくのですが、受信した内容を見てみると、入力内容が全角450文字くらいを超えた時、なぜかそれ以降の入力内容が文字化けしていました。入力内容が約450文字未満の時は問題ありませんでした。 ちなみに、入力内容は、メール送信と同時にDBにも書き込んでいるのですが、DB上のデータは文字化けしていませんでした。よって、メール送信時に文字化けしているか、あるいは、受信するメーラーの設定の問題なのか、その他に原因があるのか、うまく切り分けができずに困っています。 メールの送信には、SmtpMailクラスのSend()メソッドを使っています。メーラーはBecky!を使用しています。フォームからの入力文字は1000文字程度を予定しています。 文字化けを回避する方法について、どなたかアドバイスいただけないでしょうか? なお、開発環境は以下のとおりです。  OS:Windows 2003 Server  IIS:ver6.0  Microsoft .NET Framework SDK v1.1 よろしくお願いいたします。

  • 文字化けしてメールが送信できない

    メールフォームを作成しているのですが完全に文字化けしてしまいます。 また、subjectなどは文字化けするだけなのですがbodyに日本語を入力し送信させるとエラーになります。 どうすればいいのでしょうか?

    • ベストアンサー
    • PHP
  • PHPの文字化けするもじについて

    お問い合わせフォームをPHPで作っているのですが、 下記のPHPで文字化けする文字の一覧の中で、 IX・・がどうしても文字化けしてしまいます。 私はエンジニアではないのですが、開発をしている中国人のエンジニアがどうしても修正することができなくて困っています。 コードの記述や、参考サイト(日本語でOK)があれば、 エンジニアが見てわかりますので、どなたか分かる方はいらっしゃらないでしょうか。 ■PHP文字化けする文字一覧 ― ソ Ы IX 噂 浬 欺 圭 構 蚕 十 申 曾 箪 貼 能 表 暴 予 禄 兔 喀 媾 彌 拿 杤 歃 濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭 よろしくお願いいたします。

    • 締切済み
    • PHP
  • MacのSafariはメール送信フォームで文字化けします

    メール送信フォームで「Safari」から送信する場合、画面の表示も文字化けしてますが、届くメールも文字化けしてしまいます。 そのプログラムは既存なので私の方では内容が見れませんが、原因がわかれば連絡して修正していただける可能性もあります。 何か対策方法はありますでしょうか?

    • ベストアンサー
    • CGI
  • メールフォームが文字化けします、、、、

    メールフォームが文字化けします、、、。 「申します」→「垂オます」 とかなってしまいます。 また、「(1)」とかは「?」になってしまいます。 いろいろ調べてみたんですがこの辺かなぁとは思います。 ちなみにプログラミングなどド素人です。 ____________________________ if(get_magic_quotes_gpc()){$str = stripslashes($str);} //¥除去 return $str; } ____________________________ アドバイスお願い出来ましたら幸いです。><;

    • ベストアンサー
    • PHP
  • メールの文字化けについて

    現在ACCESS2000(WIN98)で BASP21を利用してメールを受信して メールの内容を解析してデータベース化しているのですが、 メール本文が部分的に文字化けしてしまうことがあります。 BASP21に漢字コードを変換する命令があったのですが どのコードもうまく変換されませんでした。 ちなみにそのメール本文を新しいメールに貼り付けて 自分宛に送信して解析したら文字化けが起こりませんでした。 このように部分的に文字化けする原因はどのようなことが考えられるのですか。 またこの文字化けを直す方法を教えてください。 宜しくお願いしますm(_ _)m

  • メール送信フォームで文字化けします

    メールの送信フォームをフラッシュベースで作ってるのですが、英数字以外が文字化けしてしまいます。 例えば「テストです。」と入力した物が 「%83e%83X%83g%82%C5%82%B7%81B」と文字化けします。 getURLでメール送信のcgiのアドレスをいれ、形式は"get"にしてます。(cgiの方も合わせてます) "post"にしたら何も文字が表示されませんでした。 スクリプトの記述の一番最初のところに System.useCodepage=true と書いてもだめでした。 どうしたらいいのかわかりません。 教えていただけますか。 よろしくお願いいたします。

  • 文字化け-メールフォームから送信されたもの

    検索したのですが、答えが見つからなかったので質問させて頂きます。 PC用のサイトとi-mode用のサイトを持っているのですが、 i-mode用のサイトに設置してあるメールフォームから送信された文章が、全て文字化けしていて読めません。 例を挙げるとこんな感じです→%92%b7%95%d2%8f%ac WEB上のツール(文字化けしたメールの修復)を使わせてもらったのですが、やはり文字化けしたままでした。 text.txtをhtmlにして全文貼り付け、エンコードを変えてみると言う方法も試してみました。 %のあとに数字か英文字が二文字続くものです。こう言った文字化けはどうすれば読めるようになるのでしょうか。 宜しくお願い致します。

  • CGIフォームに書いてある @ が消える対策を教えてください。

    CGIフォームに書いてある @ が消える対策を教えてください。 perl、シフトJISのメールフォームCGIをダウンロードして利用しています。 このCGIの設定画面で登録したメールアドレス署名部分の info@example.comの @ 部分の記号が消えちゃいます。 (タグとか使いません。テキストで登録すれば改行も自動反映します。) 送信画面からメールを送った場合は全く文字化けしません。 @にするのが良いのでしょうか? 多くの環境で文字化けさせたくないのですが。 以下の文字化けテストもしてみました。 ------------------------------------ @@―ソ噂十申貼能表暴予禄@@ @@\―\ソ\噂\十\申\貼\能\表\暴\予\禄\@\@\ @@―\ソ\噂\十\申\貼\能\表\暴\予\禄\@@ メール info@example.com メール info@\example.com メール info@example.com ------------------------------- 結果は、以下のようになりました。 ------------------------------- @@<縁嵩舶沫蓮@ @@―ソ噂十申貼能表暴予禄@@ @@―ソ噂十申貼能表暴予禄@@ メール info.com メール info@ xample.com メール info@example.com ------------------------------- 数時間ほど調べたのですが解決できませんでした・・・ 詳しい方ご回答をお願いします。<(_ _)>

    • ベストアンサー
    • CGI
  • マイクロソフト アウトルック2003で送信メールが文字化け

    大変困っています。 マイクロソフトのアウトルック2003で、こちらから送信したメールの一部の文字が、メール受信者側で文字化けしてしまいます。 文字化けする文字は一部の数字や一部の漢字です。 数字は「MFE」と文字化けし、一部漢字は「容斗」などと文字化けします。 もちろんこちらから送信する際には、普通の文章です。 メール形式を「テキスト・リッチテキスト・HTML」と変更してもダメでした。 また「メールの編集にword2003を使用する」のチェックを切り替えてもダメでした。 最後にマイクロソフトのWEBで、送信メールが受信者側で文字化けする現象を検索すると「エンコードの設定を変更する。エンコード方法を自動選択するのチェックをはずす」とありましたので、これも試しましたがダメでした。 自分の調べれる範囲でいろいろと試してみましたが、やはり受信者側で文字化けしてしまいます。 オークションのメールのやり取りで、相手の方から一部文字化けしていると言われて始めて気づきました。 試しに会社や自分の携帯に、設定をいろいろ変えて送信してみましたが、どれも文字化けしていました。 ですので、受信者側が悪いとは思えなくって。 どうにかこの文字化けを改善する方法を教えてください。 宜しくお願い致します。