##文字コードで失敗した話
1.mb_send_mailで文字化けしてメール送信できないよー!
2.掲示板で相談
3.そもそも保存した時の文字コード間違ってる
発端はphpのメールフォームでmb_send_mail()しようとして
日本語がすべて?????になってしまった事象から。
再発防止の備忘録としてメモ。
mb_send_mail()で文字化けした場合、
サーバの文字コードとソースの文字コードを調べたり
mb_language()とmb_internal_encoding()
の文字コード指定をチェックをするのが基本のようで
mb_language()はPHP: mb_language - Manualにある通り
mb_send_mail()の送信する時の文字コード設定につかわれるので
ISO-2022-JPで送るなら"ja"もしくは"japanese"。
mb_internal_encoding()は変換元になる文字コードで
ソースをUTF-8で書いてるなら"UTF-8"。
PHP: mb_internal_encoding - Manual
<?php
mb_language("ja");
mb_internal_encoding("UTF-8");
mb_send_mail($mailTo,$subject,$body,$header);
たいていは、メールの文字化けと言えばこれでOK。
ですが、相変わらずクエスチョンばかり。
ついに掲示板へ質問。
以下の確認が行われました。
*mb_internal_encoding("UTF-8")は本当にちゃんと設定できてる?
*$subjectと$bodyはその場でUTF-8で出力できてる?
結果、後者ができておらず
mb_send_mail()うんぬん以前の話であったことが判明。
穴を掘って入りたいです。
最終的にはUTF-8にBOMがくっついてたのが原因だったわけですが
EmEditorで新規作成した際に「名前を付けて保存」すると
デフォルトで「BOMを付ける」にチェックが入っているんですが
これを外し忘れていたようです。