LoginSignup
9
9

More than 5 years have passed since last update.

UTF-8で文字化け

Posted at

文字コードで失敗した話

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

form.php
<?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を付ける」にチェックが入っているんですが
これを外し忘れていたようです。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9