noshi’s diary

ゲームの事、映画やドラマ、思いついた事、プログラミングの事、雑記的なことを書いています

mb_send_mail関数 文字化け

mb_send_mailでメールを送信したとき、一部文字が「?」と文字化ける。

テストで色々メールフォームに任意の文字を入力したところ、半角カタカタで入力した文字が「?」になってしまう。どうやら機種依存文字がこれに変換されているようです。

PHP文字コードが原因でした。コードを確認すると、

// カレントの言語を日本語に設定する mb_language("ja"); mb_internal_encoding("UTF-8"); mb_send_mail(送信先アドレス,$subject,$message,$header);

のようにしていました。これだと、文字コードISO-2022-JPで送信してしまうそうです。

文字コードISO-2022-JPで、mb_send_mail関数を使ったメール送信は、基本的には機種依存文字が文字化けの原因となってしまうようです。

マニュアルによれば、ISO-2022-JP-MSがサポートされています。

http://php.net/manual/ja/mbstring.supported-encodings.php

調べてみると、phpのバージョン5.2.1以降から、ISO-2022-JP-MSがサポートされるようになったようです。

これは目からうろこでした。