作者:上村崇 フリーランスのIT系エンジニア
twitter:@uemera facebook:uemura

mailto:に乗せるSubjectの文字コードは携帯キャリアやOSによって場合分けする必要がある


何日かこの問題で悩んだのでメモっときます。
 
HTMLに

<a href=”mailto:user@dammy.com”>MAIL</a>

 
と書くとメールアドレスへのリンクが張られ、メールクライアントが起動するようにできます。
これにSubject(件名)も一緒に渡せるようにしたい場合は
 

<a href=”mailto:user@dammy.com?subject=件名文字列”>MAIL</a>

 
とすればメールクライアントに件名も渡すことができます。
 
0224.png
 
 
しかし、この”件名”に日本語(マルチバイト文字列)を使った場合、文字コードを適切に設定しないと携帯電話などで使った場合に文字化けします。
日本語の件名が文字化けしないようにするには、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とします。)
 
$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 );
}

 
 
[参考]
PCから携帯へメールを送る際に気をつける7つのポイント – Layer8 Reference
http://ref.layer8.sh/ja/entry/show/id/198

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です