モバイルサイト制作における文字コードの扱い
モバイルサイト制作における文字コードの扱いについて
復習の上、簡単にまとめなおしたので、それをメモ。
参照URL: 携帯サイトの文字コードに気をつける
Shift_JIS
基本的に日本でモバイルサイトを制作する際には、文字コードはShift_JISを利用する。
出力文字コードは「SJIS-win」
モバイルサイトで絵文字を扱うには、各キャリアの絵文字が設定されている「外字領域」を含んだ文字エンコードを利用する必要がある。
PHPの場合では、それは「SJIS-win」になる。SJIS-winはShift_JISに比べて扱える文字種が増えていて、キャリアごとの絵文字領域もカヴァーしている。そのため、PHPでモバイルサイトを作成する場合にはShift_JISではなく、SJIS-winを使用する。
内部文字コードは「eucJP-win」
内部文字コードにEUC-JPを利用している場合(ソースファイル、プログラムファイルをEUC-JPで作成している場合)は「eucJP-win」を利用する。(これも出力文字コード同様、絵文字領域をカヴァーするため)
php.iniの「mbstring.internal_encoding」項目において、内部文字エンコードに「eucJP-win」を指定してやる。
UTF-8
UTF-8の場合は、これは絵文字領域もカヴァーしているらしいので、とくに意識する必要はないらしい。
(内部文字コードはUTF-8を指定して、ソースファイルの文字コードもUTF-8使って、んで出力の場面でのみ mb_internal_encoding を使って出力文字コードに SJIS-win してやればいいってこと?試してないけど)
例外(SoftBankの3GC型)
SoftBankの3GC型端末では、文字コードを SJIS-win ではなく、UTF-8 で出力しないと不具合が起こるらしい。なので、通常の携帯端末へは SJIS-win で出力、SoftBankの3GC型端末のみ UTF-8 で出力という出し分けを行う必要がある、らしい。
PEARのNet_UserAgent_Mobileを使った場合の処理例
<?php // Net_UserAgent_Mobile require_once('Net/UserAgent/Mobile.php'); // Net_UserAgent_Mobileをインスタンス化 $agent = Net_UserAgent_Mobile::singleton(); // 出力する文字コードを変換 // SoftBankの3GC型端末はUTF-8に、それ以外はSJIS-winに変換 if ($agent->isSoftBank() && $agent-> isType3GC()) { mb_convert_variables(mb_internal_encoding(), 'UTF-8', $_POST); mb_convert_variables(mb_internal_encoding(), 'UTF-8', $_GET); } else { mb_convert_variables(mb_internal_encoding(), 'SJIS-win', $_POST); mb_convert_variables(mb_internal_encoding(), 'SJIS-win', $_GET); } ?>

Comments
No comments so far.