しらぎくモバイルシステムのプラグイン(オプション機能)で、iモード対応の絵文字を含んだコンテンツを他端末でも閲覧可能になるように処理するプラグインの仕様に関する解説です。
しらぎくモバイルシステムでは、第3.500版(平成17年 9月26日)から、絵文字変換機能をプラグインで実装しました。
これはiモード向けに書かれた日本語HTML文書に埋め込まれた絵文字コードを他端末向けに適宜変換するというものです。
対応していない環境へは代用アイコン(静止GIF画像を通常の画像同様に適宜変換します)を代わりに配信します。
現在の実装状況は以下の通りとなります。
国内iモード端末に対してはバイナリコードにして埋め込まれます。
但し、旧型機種で拡張絵文字に対応していないものはその文字のみ代用アイコンとなります。
また、海外iモード端末についても対応できる文字はユニコード数値文字参照に置き換えられます。
Lモードについては、旧型機と現行機で対応範囲が異なるため、それを考慮したものとなります。
オープンウェーヴ社のブラウザに対してのみ、内蔵アイコンを配信するようにします。
内蔵アイコンは<img>要素のlocalsrc属性でWAP 1.0機種ではアイコン名、WAP 2.0機種にはアイコン番号で指定しております。
オープンウェーヴ社が配布しているシミュレータでは国内仕様のアイコンは表示出来ません。
このシミュレータにはカシオ計算機製のA5401CAなどをアイコンを除いてほぼ忠実にシミュレートしており、実機と区別は困難です。
しかしながら、WAP 1.0の記述言語であるWML 1.xの仕様ではsrc属性とlocalsrc属性を同時指定した場合、localsrc属性で指定されたアイコンが有効であれば、src属性を無視する仕様、すなわちlocalsrc属性がsrc属性に優先するものの、エラーとなる場合はsrc属性を利用する仕様になっており、WAP 2.0ブラウザでも後方互換性の見地から同様の実装となっているようです。
このため、国内端末独自となるアイコンの表示では全てsrc属性による代用アイコンの指定も同時に行なっております。
オープンウェーヴ社以外の端末では、一律に代用アイコンとなります。
ソフトバンク端末に対しては、所定のバイナリコードに変換して埋め込まれます。
但し、非パケット機では、文字コードの一部が対応出来ないため、代用アイコンとなるものがあります。
パケット機でも、相当する絵文字が無い場合は、代用アイコンとなります。
商用サイトでソフトバンクの絵文字を利用する場合、ソフトバンク社への届出が必要になります。このため、強制的にソフトバンク絵文字を全て代用アイコンにする事も出来ます。
H"リンクでは代用アイコンが表示出来ないため、H"リンクのアイコンが利用出来ない場合は代替文字列に置き換えます。
この文字列は基本的にiモードで定められたものに従いますが、一部異なるものがあります。
エアーエッジフォンはH"リンクと全く同じアイコンを利用しますが、同時に画像のインライン埋め込みも可能ですので、対応出来ないものには代用アイコンで対応します。
その他の端末では、一律に代用アイコンになります。
HTML変換スクリプトでは、
PC向け絵文字の文字コードとiモード絵文字の文字コードの存在し得る範囲は、それぞれ2500〜33F0とF840〜F9FEとなるため、衝突は起こりません。
一部上述されているものもあります。
ソフトバンクでは、バイナリの中に「<」や「>」が含まれ得る仕様となっており、この処理を施してHTMLコンテンツ変換スクリプトに引き渡そうとすると、HTML変換スクリプトはタグの一部と誤認してしまい文字化けを引き起こす事になります。
このため、一旦特別な文字参照に変換して、HTMLコンテンツ変換スクリプトで対応するようにします。
WAP 1.0/2.0では公式に利用出来るアイコンの数が限られており、日本のEZウェブではこれを独自に拡張してサーヴィスしております。
オープンウェーヴ社が配布している開発者向けシミュレータでは、この独自アイコンが実装されておらず、このため正常に表示出来ないだけでなく、システム障害を引き起こす事もありました。
この対策として、実装が保証されていないアイコンの表示については必ずsrc属性で代用アイコンを指定するようにしました。
iモードと高い互換性がありますが、iモードマークなどは実装していません。
代りに別の文字コードでLモードマークが実装されているのでこれに置き換えます。
WAP 1.0/2.0, ソフトバンク及びエアーエッジフォンについても、同様に代用アイコンに置き換えます。
このスクリプトでは変換表の作成にかなりの時間が掛かり、それが相当な負荷になると思われます。
このため、変換の必要が無い場合、すなわち適切なバイナリや数値文字参照が見出されない場合は処理せずにそのまま受取ったHTMLデータを返すようにしております。
具体的には、「&#
数字」「&#x
」またはキャラクタコードが0xf8か0xf9で始まる 2バイト文字を検出した場合にのみ変換処理が実行されます。
代用アイコンについて、システム設置ディレクトリ直下のサブディレクトリ「icons」内に「Add-iIcon」ディレクトリを設置し、そこに収納する事となっております。
アイコンは14ピクセルズ四方と32ピクセルズ四方の二つの解像度があり、いずれも透過静止GIF画像となります。
ファイル名はiモードのシフトJISコード十六進数四桁(英字は大文字)に「.GIF」がついたもので、32ピクセルズ四方のものは、頭に「L-」が付きます。
この他、私的なアイコンも用意されております。
HTML文書においては、単純に絵文字を<img>要素などに変換すると、コンテンツ処理の誤作動を引き起こす箇所があります。
このため、幾つかの工夫をしております。
<title>要素の内容にマークアップされた要素が入る事は禁止されているので、内蔵されていない絵文字は「?」に変換します。
要素の属性値にタグを入れるとそこでタグが終わったものと誤認する恐れがあるので、いくつか工夫しております。
属性値を「"
」(二重引用符)で囲んでいる場合は、<img>要素のタグ内の「"
」(二重引用符)を属性値の終わりとせずに読み続けるようにします。
>
」で切らずに読み続けるようになっております。<
」や「>
」は自動的に実体参照に書き換える事でトラブルを回避します。但し、<a>要素で内部画像をリンクする場合、その画像の説明を記述するtitle属性内の<img>要素タグはそのままの状態で引き渡すようにします。こうする事で、画像に対しての見出しにも絵文字が使えるようにしております。
<
」「>
」をURLエンコードします。日本でも、現行機種ではユニコードの数値文字参照に対応した端末になっております。
現在はiモードとPC(一部)からのみの変換に対応しておりますが、WAP 1.0/2.0やソフトバンクの絵文字を処理できたらと思います。
代用アイコンはドコモのデザインに準じたものとしましたが、他社に較べて非常に地味なデザインとなっております(その代わり白黒端末でも問題無い表示になるのですが…)。
これをもう少しオリジナリティのあるものに出来たらと思っております。