BEARは日本の携帯電話、ドコモ(Foma), AU, SB(3GC)に対応しています。 表示のエンコード切り替え、POST/GETされた文字コードの自動変換、絵文字変換などが自動で行われます。 PCとモバイル両用サイトが標準的に実装できます。
ドコモとAUのサイトの時のみはコンテンツがSJISに変換され、適切なSJISヘッダーでSJIS表示されます。SB(3GC)はUTF-8で表示されますが、これはどの端末でも絵文字のサブミットができるようにするためです。
モバイル用含めて、全てUTF-8を使います。
サブミットされた値はonAction(array $submit)メソッドの$submitに代入されます。表示がSJISのドコモやAUでも$submitにはUTF-8の文字コードで文字が入っています。
モバイルに限りませんが、想定外の文字コード(SJISで表示しているのにUTF-8がPOSTされた)がサブミットされたら「不正リクエスト」とみなして400 Bad RequestのHTTPレスポンスを返します。
スタティック絵文字とはテンプレートにスタティックな文字として埋め込まれてるものです。テンプレートキャッシュコンパイル時にのみ処理され、それ以降は生成コストがかかりません。テンプレートキャッシュはBEARで定義されたエージェント毎に用意されUAに応じたテンプレートが使用されます。テンプレートにあらかじめ埋め込む事ができる静的な場合に利用します。 Smartyのemojiプラグインを使って以下のように記述します。
<emoji SUN>
絵文字の定数については以下を参照してください
数値エンティティとして表現された絵文字をエージェントに応じて画像変換します。
サブミットされたバイナリ絵文字はBEARが10進数の数値エンティティ(金など)に変換されます。このエンティティをテンプレートにアサイン(set)すると、表示時にSmartyフィルターで自動的にバイナリ絵文字に変換されます。
数値エンティティはドコモ,AUはSJIS、SB(3GC)はUnicodeの文字コードで表されます。これで絵文字コードがキャリアで被る事が無くなります。どのキャリアで保存したかという情報なしにエンティティをバイナリ絵文字に復元できます。数値エンティティなのでSJISのコードであっても、UTF-8のDBにSJISの絵文字コードを格納することができます。
PCで見ている場合や、他のキャリアの絵文字などは画像として表示されます。自分のキャリアと同じ絵文字のデータのみバイナリでネイティブ表示されます。フォントは2サイズ用意されていてPCと携帯と解像度の大きく異なる環境に対して適切なサイズが自動で選択されます。
PCのサイトがindex.tplを表示する場合、(1)エージェントがモバイルで(2)モバイル用テンプレートが用意されていれば、モバイル用ページが表示されます。プログラムで特に指示する必要はありません。
同様にモバイル用のスタティック変数、モバイル用のレイアウトファイルが使えます。いずれの場合も「モバイル用のものががあれば」という動作条件は変わりません。PCサイトを作った後にプログラムの変更を最小限にテンプレートのみの追加でモバイルサイトが用意できます。