【PHPで作る】初めての携帯サイト構築
第4回 絵文字を取り扱う
絵文字を扱う上で考えること
携帯サイトを作る上で必ず通るのが「絵文字」です。絵文字は1文字(2バイト幅)で表現され,キャリアによって仕様が異なります。絵文字の個数や種類なども統一されていないため,キャリアごとに独自の絵文字が採用されています。またキャリアによって対応している絵文字数が違うだけでなく,端末によっても対応している絵文字が異なったりといったことがあります。
docomo
| 対応機種/タイプ | 絵文字対応状況 |
|---|---|
| iモード対応HTML3.0以前 | 基本絵文字176種類が利用可能 |
| iモード対応HTML4.0以降 | 基本絵文字176種類+拡張絵文字76種類が利用可能 |
au
| 対応機種/タイプ | 絵文字対応状況 |
|---|---|
| C3001H/C3002K/C3003P/C5001T/A3011SA/A3012CA/A3013T/A3014S | 絵文字番号1~344,500~518が利用可能 |
| A3015SA | 絵文字番号1~344が利用可能(※アニメーション絵文字対応) |
| A1101S | 絵文字番号1~822が利用可能 |
| A1300シリーズ,A1400シリーズ,A5000シリーズ,Sweets pure,G'zOne TYPE-R,Sweets,talby,INFOBAR,PENCK,neon,Wシリーズ(W06K,W05K,W04K,W03H,W02H,W01Kを除く) | 絵文字番号1~822が利用可能(※アニメーション絵文字対応) |
SoftBank
| 対応機種/タイプ | 絵文字対応状況 |
|---|---|
| C型 | Unicode(E001~E257)の絵文字に対応(※一部端末ではP型以降と同じ絵文字数対応) |
| P型,W型,3GC型 | Unicode(E001~E537)の絵文字に対応 |
基本的にどの端末にも画面表示できるよう対応するためには,必要最低限の絵文字のみを出力するように工夫します。絵文字を出力しているつもりでも古い端末では表示されていなかったということもありますので,注意が必要です。
絵文字を考えるポイントは大きく2つあります。「画面への出力」と「画面からの入力」です。「画面への出力」はキャリアごとに決められた方法で出力します。「画面からの入力」は入力フォームから入力された絵文字を取り込む方法です。「うちの携帯サイトは絵文字を扱わないことに決めたから気にしなくて良いや」と思っていても,入力フォームがあるサイトではユーザーは文字に絵文字を入力してくる可能性があります。絵文字の知識をきっちり持っていないと取り除くこともできず,入力されてそのまま文字が化けてしまうといったことがあります。そのため絵文字を利用しないサイトでも絵文字に関する知識は最低限知っておく必要があります。
絵文字を出力する
まずは絵文字を出力する方法を見ていきましょう。絵文字の出力方法は各キャリアで異なり,絵文字を表現する方法も1つに限定されているわけではありません。各キャリアの絵文字の表現方法は次の通りです。
絵文字の表現方法
| キャリア | 絵文字の表現方法 |
|---|---|
| docomo |
|
| au |
|
| SoftBank |
|
基本的にどの方法を使って表現しても構いませんが,注意することがあります。それは表現する方法によって若干の意味の違いがあるということです。auの場合「絵文字番号を使ったタグ記述」と「バイナリ記述」の絵文字の出力方法がありますが,前者で絵文字を出力した場合,絵文字が「画像」で出力されます。一方後者の場合,絵文字が「文字」として出力されます。つまりフォントの大きさを調整した場合,前者は大きさが変わらず,後者は大きさが変わるといったことになります。画面のデザインやレイアウトを気にする場合はよく理解して利用する必要があります。特に問題がなければ,絵文字はバイナリを利用するのがよいでしょう。PHPでバイナリ絵文字を表示するには次のように実装します。
auの「太陽」のマークを出力する
pack('H4',dechex(63072));
各キャリアの絵文字のコードは次のサイトに掲載されています。
- docomo
- au
- SoftBank
-
J-PHONE絵文字の構造
Softbank絵文字というか、J-PHONE絵文字ですが、よくわからないなら中途半端に触れずに無視した方がいいんじゃないですかね。Softbank XHTML は UTF-8 で書けばいいですし。
一応代わりに解説しますと、J-PHONE絵文字は ISO/IEC 2022 の枠組みを「参考にして」作られています。その詳細はSoftbankの配布している「ウェブコンテンツ開発ガイド [HTML編]」の2.4.2.3に書かれています。が、この内容はISO/IEC 2022を「ISO-2022」と表記しているところから始まって誤解と誤りに満ちており、自然言語で書かれた解説は何の役にも立ちません。
結論としては ESC $ [GEFOPQ] で絵文字世界に入り、1 バイトの絵文字任意に書き連ね、絵文字世界から抜けるには ¥x0F。[GEFOPQ] の部分が同じ絵文字を複数続ける場合はそのまま次の絵文字を書ける、ということです。(なので、この場合は 7byte でなく 6byte)。
UTF-8 周りは UTF-8 コードなんて謎の表現を使わずに、Unicode のコードポイントを使えば他社の絵文字の Unicode での表現もまとめて説明できるように思いますが、まぁさすがにそれだと紙面が足りないかなCommented : #1 成瀬 (2009/02/16, 14:16)


