電子書籍の厳選無料作品が豊富!

お問い合わせメールフォームを作りました。
一部のお客様からのメールが部分的に文字化けします。
==========
E月E6日に宿泊させてぁEだきました�
そE際E対応でどぁEても納得できなかった為メールしました�
==========
メールフォーム自体は UTF-8 でエンコードしていて、メール送信の際に JIS にしています。
==========
<?php
mb_language("Japanese");
mb_internal_encoding("utf-8");
[snip]
$from_name = mb_convert_encoding($from_name, "JIS", "UTF-8");
$from_name = '=?ISO-2022-JP?B?'.base64_encode($from_name).'?=';
$body = mb_convert_encoding($body, "JIS", "UTF-8");
[snip]
$mail_true = @mb_send_mail($mailto, $subject, $body, $additional_headers);
[snip]

A 回答 (1件)

mb_language("Japanese");


mb_internal_encoding("utf-8");

を指定していますからmb_send_mailの第3引数まではphp側がutf-8→iso-2022-jpの変換を行います。なので$bodyを自前でmb_convert_encodingしているのは『余計な処理』です。utf-8として「おかしい」文字はそのままかもしれませんが、utf-8→iso-2022-jpが可能だった部分は変換されてしまいます。

$body = mb_convert_encoding($body, "JIS", "UTF-8");

この処理を外してみてください。



なお第4引数(自動変換の対象外)の$from_nameもmb_encode_mimeheaderを使って

$from_name = mb_encode_mimeheader(mb_convert_encoding($from_name, "JIS", "UTF-8"));

とすべきです。

#出来れば他のライブラリ(JPHPMailer)を使う方がいいんですが・・・
    • good
    • 0
この回答へのお礼

返信が遅れ申し訳ありません。

ご教示いただいた修正をして、テストメールを送ってみました。
結果は文字化けしませんでした。
ただ、私の環境では修正前でも文字化けしなかったので、
他の環境で文字化けするか、まだわかりません。

ご回答ありがとうございました。
よろしくお願いします。

お礼日時:2012/02/09 10:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!