• ベストアンサー

phpで実体参照文字を含んだ文章のメール送信

たとえば、®(®)やç(ç)など、実体参照文字をphpのmb_send_mailで送信する場合、数値参照に変換してhtmlメール(Content-Type: text/html)にしないと文字化けは解消できないのでしょうか? テキストメールContent-Type: text/plainので文字化けせずに送信できる方法はありませんか?

  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

text/plainですから実体参照や数値参照でなく文字そのものを送らないと勝手に変換はしてくれません。 mb_send_mailを使う場合、mb_languageでの言語指定でcharsetが変わります。 mb_language('ja') → iso-2022-jp(日本語メールの標準) mb_language('uni') → utf-8 おそらく mb_language('ja') になっているので、phpスクリプトのutf-8からメールのiso-2022-jpに変換されるため、iso-2022-jpに存在しない文字がおかしくなるだけだと思います。mb_language('uni')にしてutf-8のまま送るなら(utf-8の)phpスクリプトで扱えている文字なら大丈夫です。 一昔前は(utf-8非対応のメーラも相当数残っていたので)iso-2022-jp以外に選択肢がなかったけど、今はutf-8でも問題ないと思います。

sun_bigstar
質問者

お礼

ありがとうございます。 mb_language('uni') Content-Type: text/plain;charset=UTF-8 でうまく送信できました。

その他の回答 (2)

  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.2

utf-8などの、それらを表示できる文字セットで送信すればできますよ。 それを読むメーラーも、その文字セットに対応している必要はありますけど。 Content-Type: text/plain; charset=utf-8

sun_bigstar
質問者

お礼

ありがとうございました。 おかげさまで文字化けなく送信できるようになりました。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

別に文字化けせずに、実体参照や数値参照のままで送れます。 text/plain的には、単なる記号と英数字なので、文字化けしません。 実体参照や数値参照でなく、それらが表す文字自体を見せたいのなら、HTMLメールしか無いですね。

sun_bigstar
質問者

お礼

ありがとうございます。 Content-Type: text/plain;charset=UTF-8 で文字自体を送信することができました。

関連するQ&A

  • PHPメール送信で文字化け

    PHPでメール送信フォームを用意し、「本文、件名」共に日本語で入力して送ってみたのですが送信結果が文字化けしてしまいます。「あ」と入力して送信すると「??」となってしまいます。 どなたか解決できるようアドバイスをください。 <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> <body> <?php $mail_send = "ABCDEFG@y.co.jp"; //宛先 $mail_sub = $_POST["mail_sub"]; //件名 $mail_text= $_POST["mail_text"]; //本文 mb_send_mail($mail_send, $mail_sub, $mail_text); ?>

    • ベストアンサー
    • PHP
  • Outlook2007でLotus Notes受信メールが文字化け

    マイナーな現象ですが、ご存知の方がいれば教えてください。 受信側:Outlook2007 送信側:Lotus Notes Release 6.5.2 文字化け受信メールの文字情報 Content-type: text/plain; charset=UTF-8 Content-transfer-encoding: base64 上記の状況でOutlook2007で文字化けが解消する設定などが ありましたら、教えていただければと思います。 よろしくお願いいたします。

  • PHP の mb_send_mail で HTMLメール送信

    mb_send_mailでHTMLメールを送信すると 受信メールのヘッダ情報が勝手に追加されてしまいます。 【PHP内で指定しているヘッダ】 $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-2022-jp' . "\r\nX-Mailer: PHP/".phpversion(); 【受信メールのヘッダ情報】 Mime-Version: 1.0 Mime-Version: 1.0 Content-Type: text/html; charset=iso-2022-jp Content-Type: text/plain; charset=ISO-2022-JP というように、指定もしてないContent-Type: text/plainが 追加されたり、Receivedも同じように勝手に追加されてしまいます。 考えられる原因を教えていただけますか?

    • ベストアンサー
    • PHP
  • PHPフォームからメールを受信した時に文字化けが発生

    申し込みフォームから受信したメールが、文字化けします。 windowsではちゃんと表示されるのですが、macでは文字化けします。 更に、必ずはじめに以下の文面が記載されてきます。 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit 困ってます!!宜しくお願い致します。

    • 締切済み
    • PHP
  • もらったメールが文字化けしています

    知人から送られてきたメールが文字化けしており困っています。 <送信者の環境> 送信者は中国からですが、文字入力は間違いなく日本語でされています。 ただし、Yahooのフリーメールを利用しています。(@yahoo.co.jpではなくて@yahoo.comです) <受信者(私)の環境> 私の方は、Becky!を利用しています。 メニューから文字化け用の解読も試してみましたし、 自分のフリーメールにも転送してみましたが、 いずれもダメでした。 過去の質問も検索をかけてみて、似ているものを 調べたり、参考URLにも行ってみましたが、 よく理解できていない部分もあっていずれも 成功しておりません。 ちなみに、メールのヘッダ情報を調べると MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii となっています。 これって、 Content-Type: text/plain; charset="ISO-2022-JP" になっていないと日本語で読めないんでしたっけ? それに、他のメールでは見受けられる Content-Transfer-Encoding: 7bit っていう部分もないんです。 今後も中国と日本で(日本語で)メールのやりとりを するつもりなので、今回の化けたメールの復元法と、 文字化けを防ぐための根本的な解決法とを、 両方、教えていただけると大変助かります。 よろしくお願いします。

  • 相手に送ったメールに英文字が付いている?

    相手に送ったメール本文の前後に、英文字が付いています。 意味がわからないので、どなたか教えてください。  以下のようです。  Content-Type:text/plain;・・・・・・・jp     メール本文  ーー0-938・・・・・・  Content-Type:text/plain;・・・・・・・jp  よろしくお願いします。

  • utf-8でメールを送信すると件名が文字化け

    Perlでメールフォームを作成しております。 今後のこともあってUTF-8でファイル、HTMLの出力をおこなっております。 なにかとutf-8便利でさくさくと問題なく作成していたのですがメール送信の肝心な部分で問題が出てきました。 送信先はiモードで506iです。 メールのヘッダーを以下のようにして送ると件名の日本語がどうしても文字化けします。本文はしません。アウトルックエクスプレス6.0では文字化けしません。YahooWebメールは文字化けしました。 Reply-To: $adminmail Errors-To: $adminmail To: $user_mail From: $adminmail Subject: $subject content-transfer-encoding: 7bit Content-type: text/plain; charset=utf-8 ・携帯がutf-8に対応していないメーラーなんだろうと思いますがなぜ本文は文字化けしないんでしょうか。 ・件名を文字化けをしないようにする方法はありますでしょうか?(ファイルの保存形式はutf-8を変えずに)

    • ベストアンサー
    • CGI
  • 海外からのメールの文字化け

    お世話になります。海外(たぶんカナダ)から仕事用のメールが来たのですが文字化けして読めません。なにかいい方法はないでしょうか。この分だと多分こちらからのメールも文字化けしているのではと思います。ちなみに送られてきたメールの情報は  Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="ISO-2022-JP" です。エンコードを変えたりしたのですが全然だめです。ちなみにoutlook expressです。よろしくお願いいたします。

  • 顧客への返信メールが文字化けして困っています。

    いつもお世話になっております。初心者です。よろしくお願い致します。 既にあったCGIを改造しているのですが・・・ 顧客への返信メールが、下記の様に設定されていて、それを長い長文に変更した途端文字化けしてしまいました。 ---------------------------------------------- #内容の確認 print "Content-type: text/html;charset=shift_jis\n\n"; print <<html; <html> <head> <title>内容ご確認</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <script language="JavaScript"> 省略 # フォームの送信 sub sendmail { $mail_data = <<MAIL; X-Mailer: t_kepara To: $mail From: $From Subject: $subject Content-Transfer-Encording: 7bit Content-Type: text/plain この後、長い返信文(ありがとうございました等々)が続き、それが顧客へ届くのですが、タイトルも内容も文字化けで、なお且つ、短文だったメールとは別のフォントでメールが届いてしまうのです。 過去の質問を見たのですが・・・iso-2022とか、ありましたが、適当に変更してみたのですが、うまく行きませんでした。ちなみに、この顧客用のメールを自分で拾ってみたら・・・ヘッダーが・・・ Content-Transfer-Encording: 7bit Content-Type: text/plain X-Body-Content-Type: ; charset=windows-1252 (maybe) となっていました・・・。 何かわかる範囲で結構ですので、アドバイスをいただけれると助かります。よろしくお願い致します。

    • ベストアンサー
    • CGI
  • PHPでメールを送信するには

    PHP超初心者です。 参考本をもとにPHPでメールを送信するということにチャレンジしているのですが、次のような文章が出ます。 Warning: mb_send_mail() [function.mb-send-mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\Program Files\Apache Group\Apache2\htdocs\php10\mail.php on line 11 エラー:送信に失敗しました 参考本に書いてあるとおり、 php.iniのSMTP=localhost を自分が使っているoooooo@ocn.ne.jpに書き換え、sendmailには自分の別アドレスを記述したのですが。 11行目のエラーも何を指しているのかわかりません。 ご回答よろしくお願いします。 【mail.php】 <html> <head><title>mail.php</title></head> <body> <?php $address=$_POST['address']; $subject=$_POST['subject']; $message=$_POST['message']; $header="Content-Type:text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address, $subject, mb_convert_encoding($message,"JIS","EUC-JP"),$header)){ print("送信完了しました。"); }else{ print("エラー:送信に失敗しました"); } ?> </body> </html> 【mail_form.html】 <html> <head><title>メールの送信</title></head> <body> <h2>メールの送信</h2> <form action="mail.php" method="post"> 宛先:<input type="text" name="address"><br /> 件名:<input type="text" name="subject"><br /> 本文:<br /><textarea name="message" rows="5" cols="30"></textarea><br /> <input type="submit" value="送信"> </form> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう