PHPでケータイサイトを作る際に非常に便利に使わせていただいているのが「らくらくケータイ3キャリアコンバーター(仮名)」です。(詳しくはke-tai.org > Blog Archive > PHPを使って3分で作る3キャリア対応ケータイサイト をご覧ください。)
簡単にいうと以下のようにやると3キャリア対応のケータイサイトが1つのソース(HTML)で実現できます。
- HTML(テンプレート)はXHTMLでShift_JISで書く
- 絵文字はドコモのunicode形式で書いておく (これを上記モジュールで出力時に変換する)
さてここでフォームの入力モード(docomoだとistyleとか)を指定したい場合にはどうしたらよいでしょうか?
「ケータイ xhtml 入力モード」とかでぐぐると以下のようなサイトがヒットします。
これらのサイトで述べられていることをまとめると以下のようになります。
- style属性でwap-input-formatを各キャリア仕様分並べて書いてやれば3キャリアとも機能する
- ただしSoftBankの一部の機種(特にSHARP)で入力制限モード(指定したモード以外の文字種が入力できない状態)になってしまう
大体のサイトでは2の条件はNGだろうと思うので結論としては「絵文字のように出力時に置換してやる方法しかない」ということになります。
そこで、「らくらくケータイ3キャリアコンバーター(仮名)」には docomoのときだけ istyle を wap-input-format に変換する関数が用意されていますがこれを拡張して3キャリア対応の関数を追加しました。
10 | function convert_istyle( $input , $agent ) |
12 | $rep_arr_master = array ( |
14 | 'istyle="1"' => 'istyle="1" style="-wap-input-format:"*<ja:h>";"' , |
15 | 'istyle="2"' => 'istyle="2" style="-wap-input-format:"*<ja:hk>";"' , |
16 | 'istyle="3"' => 'istyle="3" style="-wap-input-format:"*<ja:en>";"' , |
17 | 'istyle="4"' => 'istyle="4" style="-wap-input-format:"*<ja:n>";"' |
20 | 'istyle="1"' => 'mode="hiragana" istyle="1" format="*M"' , |
21 | 'istyle="2"' => 'mode="hankakukana" istyle="2" format="*M"' , |
22 | 'istyle="3"' => 'mode="alphabet" istyle="3" format="*x"' , |
23 | 'istyle="4"' => 'mode="numeric" istyle="4" format="*N"' |
26 | 'istyle="1"' => 'istyle="1" format="*M"' , |
27 | 'istyle="2"' => 'istyle="2" format="*M"' , |
28 | 'istyle="3"' => 'istyle="3" format="*x"' , |
29 | 'istyle="4"' => 'istyle="4" format="*N"' |
33 | $carrier = KetaiConverter::getCarrier( $agent ); |
34 | if (! preg_match( '/DoCoMo|SoftBank|EZweb/' , $carrier )) { |
37 | $rep_arr = $rep_arr_master [ $carrier ]; |
40 | preg_match_all( '/<input (?:.*)(istyle=("|\')?[1-4](?:"|\')?)(?: (?:.*?))?>/i' , $input , $arr ); |
41 | for ( $i = 0; $i < count ( $arr [0]); $i ++) { |
43 | $target = $arr [0][ $i ]; |
44 | $istyle = $arr [1][ $i ]; |
46 | $replacement = strtr ( $target , $rep_arr ); |
47 | $output = str_replace ( $target , $replacement , $output ); |
2 | $output = KetaiConverter::convert_istyle( $output , $agent ); |
※convert()内でDocomoのときに呼び出されている istyle_imode()はコメントアウトしておきます。
今のところこのような形で運用していますがAUの一部の機種でどうしても「入力制限モード」になってしまうことがあるようです。調べた結果AUの仕様の書き方が曖昧で、これはどうしようもないとの結論に至っています。
「らくらくケータイ3キャリアコンバーター(仮名)」はこのようにケータイサイトの出力時にいろいろ変換をかませるモジュールとして大変便利でカスタマイズしやすくなってます。
たとえばこれ以外にも
- formのaction属性にguid=ONをつける
という変換なども加えて使っています。
このような便利なモジュールを公開してくださったke-tai.orgさんに感謝です。
viewer.php
PHPのケータイ絵文字変換モジュール「らくらくケータイ3キャリアコンバーター(仮名)」に入力モード指定変換機能を追加 はコメントを受け付けていません