• ベストアンサー

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

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

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

  • ベストアンサー
  • 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% (1626/5665)
回答No.2

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

sun_bigstar
質問者

お礼

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

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

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

sun_bigstar
質問者

お礼

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

関連するQ&A