何日かこの問題で悩んだのでメモっときます。
HTMLに
<a href=”mailto:user@dammy.com”>MAIL</a>
と書くとメールアドレスへのリンクが張られ、メールクライアントが起動するようにできます。
これにSubject(件名)も一緒に渡せるようにしたい場合は
<a href=”mailto:user@dammy.com?subject=件名文字列”>MAIL</a>
とすればメールクライアントに件名も渡すことができます。
しかし、この”件名”に日本語(マルチバイト文字列)を使った場合、文字コードを適切に設定しないと携帯電話などで使った場合に文字化けします。
日本語の件名が文字化けしないようにするには、UserAgentごとの場合分けが必要になります。
いろいろ調べた結果、以下のように文字コードを設定すれば文字化けしないことが分かりました。
docomo、auガラケー | Shift-JIS |
Softbankガラケー | UTF-8 |
スマートフォン(iPhone、Android) | UTF-8 |
iPadなどのタブレット | UTF-8 |
Windows | Shift-JIS |
MAC | UTF-8 |
phpコードにすると以下のようになります。
(サーバー側で動作しているphpの文字コードはUTF-8とします。)
[php]
$subject = "日本語の件名文字列";
if( preg_match( ‘/(DoCoMo|KDDI|)/’, @$_SERVER[‘HTTP_USER_AGENT’] ) ){
// Docomo, KDDI(au)
$subject = urlencode( mb_convert_encoding($subject, ‘SJIS’, ‘UTF-8’ ) );
} else if( strpos( @$_SERVER[‘HTTP_USER_AGENT’], ‘SoftBank’ ) ){
// Softbank
$subject = urlencode( $subject ) );
} else if( strpos( @$_SERVER[‘HTTP_USER_AGENT’], ‘Windows’ ) ){
// Windows
$subject = urlencode( mb_convert_encoding($subject, ‘SJIS’, ‘UTF-8’ ) );
} else {
// Mac, Smartphone, etc
$subject = urlencode( $subject );
}
[/php]
[参考]
PCから携帯へメールを送る際に気をつける7つのポイント – Layer8 Reference
http://ref.layer8.sh/ja/entry/show/id/198