絵文字活用術その4::メールに絵文字を使うには

By uchida - 08/09/11 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

絵文字活用術 その4(メールに絵文字を使うには)

メール配信などで、絵文字入りメールを送りたい場合があると思います。
ですが、ここでもひと手間が必要になります。

■docomoの場合
文字コード:Shift-JIS
絵文字コードをそのままmail関数などで送信すると〓(ゲタ)になります。
絵文字を文字化けさせないようにするには、base64_encode()とmb_convert_encoding()を使用します。

base64_encode()とは、送信時に一定のルールに従ってデータを文字列に置換し、受信した後に元に戻る手法を
行うための関数です。これは、メール自体が、文字(テキストデータ)しか送信できないからです。

そこであえて、絵文字であるにもかかわらず、絵文字つきメールのサブジェクトや本文をbase64_encode()させることにより、
別の文字列に変換させ、一般的なメールで用いられるISO-2022-JPに置換させてから送信することで、
文字化けを防ぐことができます。

$subject = "(太陽の絵文字)件名テスト(太陽の絵文字);
$subject = base64_encode($subject);		//base64エンコード化
$subject = mb_convert_encoding($subject,"ISO-2022-JP","Shift_JIS");//ISO-2022-JP化
$subject = "=?ISO-2022-JP?B?" . $subject . "=?=";

$body = "(笑顔の絵文字)本文テスト";
$body = chunk_split(base64_encode($body));

■auの場合
docomoの時と同様の手順でメール送信を行うと、正常に受信者に絵文字が表示されます。

■SoftBankの場合
文字コード:UTF-8
絵文字コードをそのまま記載しても以下の条件で文字化けしてしまいます。

1.2G携帯の場合
2.長いメールの場合でてくる「続きを読む」でDLする場合

この場合、絵文字が「$Pe」という文字で出力されるので見栄えが悪くなります。

解決方法として、UTF-8で絵文字をバイナリデータとしてメールを送ると正常に表示されます。