Hatena::Diary

ゆどうふろぐ RSSフィード

小言用サブブログはこちら

2008-09-14

[]携帯XHTMLでの入力モードのまとめと、ちょっとしたハマりどころについて


先日の勉強会での発表内容に関して、ke-tai.orgさんのところで入力モードについて突っ込まれたので、せっかくだし書きかけの記事をきちんとまとめてみることにしました。

元々、wideの%MobileStudyで入力モードの話が出た際、意外と情報が間違って知られていたりすることが多いようだったので、特にはまりやすいあたりを中心に、入力モード指定についてざっくりと書いておこうと思って、まとめたかけでそのまま放置していたwものがあったんですが、それがベースです。

そんなわけで、記憶頼りが中心であんまり検証しないで書いてるので、間違いが含まれてたらごめんなさい。


では本題。

入力モードとは

まず、入力モード指定って何のことかという話からすると、みんな携帯をいじる時に「全角かな」とか「数字」とか「英小文字」とかいろいろ端末の文字入力を切り替えると思うんですが、あれのことです。

サイトを作る時にinputタグとかで入力欄をつけたりしますが、その入力欄に書き込む際に、入力モードを自動的に数字入力モードにする、とかそういう切り替えを実現するものです。


この、入力モード指定には各キャリア別も含めて4種類の指定があります。英字入力モードを例にとれば

  • mode="alphabet"
  • istyle="3"
  • format="*m"
  • style="-wap-input-format:"*<ja:en>""

という4種類です。


まず、ハマりどころとかは置いといてそれぞれのことを簡単に説明します。

mode

これはsoftbank特有の指定です。

パラメータには

  • hiragana : 全角かな
  • katakana : 全角カナ
  • hankakukana : 半角カナ
  • alphabet : 英字
  • numeric : 数字

があります。

istyle

元々はdocomoの「HTML」の仕様です(docomoXHTMLでは使えません。)。

ausoftbankが後追いで互換仕様を実装しています。

パラメータ

になります。

format

au仕様です

softbankは互換仕様を実装している機種もある。。と仕様書にはありますが、ごく一部のみのようで、3GC系はこれだけじゃ何も変わりません。

docomoには、互換実装はないみたいです。

  • A : 英大文字のみ (句読点の入力も可能)
  • a : 英小文字のみ (句読点の入力も可能)
  • N : 数字のみ
  • X : 大文字と数字記号 (句読点、記号の入力も可能)
  • x : 英小文字と数字記号 (句読点、記号の入力も可能)
  • M : 全角漢字 (トグルによりすべての文字)
  • m : 英小文字 (トグルによりすべての文字)

といったパラメータがあります。

パラメータの前に、数字を付与することで、入力文字数を設定できます。(6Mとか。)

数字の代わりに*をつけると、無制限になります。

-wap-input-format

style属性として指定します。

元々WAP2.0の仕様として存在するものですが、これの独自拡張がdocomoに実装されています。

指定可能なパラメータ

  • -wap-input-format:"*<ja:h>" : 全角かな
  • -wap-input-format:"*<ja:hk>" : 半角カナ
  • -wap-input-format:"*<ja:en>" : 英字
  • -wap-input-format:"*<ja:n>" : 数字

となっています。

やはりsoftbankはこれの互換モードを実装してあります。


また、auに関しては、WAP2.0の仕様にのっとった、-wap-input-formatの指定が可能です。

仕様については、こちらのページが詳しいです。

http://www.marguerite.jp/Nihongo/WWW/RefCSS/-wap-input-format.html


ハマりどころ:初期入力モードと入力モード制限

各設定項目の仕様は、だいたい上記のようになっています。

さて、それではこれらを総合すると、3キャリア対応テンプレートで使用するにはどのような書き方をすれば良いかというと、アルファベット入力にしたいのであれば

<input type="text" name="hoge" istyle="3" format="*m" mode="alphabet" style="-wap-input-format:&quot;*&lt;ja:en&gt;&quot;;-wap-input-format:*m;" />

と記述することで、各キャリアで入力モードがアルファベットになります。*1



。。。なんてのが、だいたいよく知られてるところなんですが。

実際には、これはちょっとした落とし穴があります。


それは、SoftBank端末に対してDoCoMo互換の-wap-input-formatを指定した場合、単に入力する文字種の初期状態にあたる「初期入力モード」が変更されるのではなく、入力内容そのものが制限される「入力モード制限」になってしまう、ということです。*2


入力モード制限がかかってしまうと、本当にその文字しか入れられません。許可されているモード以外の入力モードに変更できないのはもちろん、ひらがなモードになってしまえば、変換してカタカナを入れようとしてもはじかれてしまったり、英字のトグルから数字が除外されてしまうなどといった徹底ぶり。


このため、よく知られているはずの上述の方式は、本当にそのモード以外制限されてしまっていい場合を除き、ちゃんとした入力のできない困ったモード設定になってしまいます。

メールアドレスを入力させるつもりで英字モードにしたら、数字が入れられなくて登録できない!なんて落ちが待っていたりします。なお、添えておきますがこのモード制限の実装は機種依存のようです。*3


また、SoftBankの入力モード制限は-wap-input-formatのときだけではありません。

これは自分が直面した問題ではなく、IRCで相談されたときの問題なのですが、何かしらの条件下でmode属性やistyle属性の指定を行ったら、なぜか入力モード制限になってしまった、という現象がありました。

その際、なぜかistyleとformatを併せて指定したらモード制限がなくなり、めでたく初期入力モードの切り替えに成功した、なんて事もありました。

詳しい状況や機種等を聞いていなかったので再現条件が不明なのが申し訳ないところですが。。。どうも、単にmode属性やistyle属性を指定しただけでは、おかしなことになる場合があるようです。



じゃあどうするのか

上述の問題があるため、実は一切の切替機構なしにDoCoMoSoftBankでちゃんとしたモード切り替えの実現を両立させることはできません。

きちんとしたモード切り替えを全キャリアで実装するには、別テンプレート化or何らかの切替機構が必要になります。


振り分けをする場合は

という感じになるように切り替えてやると、おかしな状況にも対応でき、きちんとした入力モードの切り替えが実装できて、良い感じです。

Smartyのプラグインなり、ヘルパーにまとめるなりしてやると、簡単に使えると思います。

最後にいいわけ。

なんかこんなちょっとした話のためにだいーぶ長いエントリになってますが、まぁその辺はご愛嬌ということで。*4

一応、この内容は自分の記憶+調べられる範囲内の内容だけなので、もっと細かく面倒な情報があるかもしれません。

もし、他にも色々詳しく知っている方等いらっしゃったら、ぜひご指摘ください。

*1:最後の-wap-input-format2つ目は、au用です。これがないと、auDoCoMoの独自-wap-input-formatの影響でおかしくなったりします。

*2:初期入力モードも入力モード制限も、自分の造語です。何と表現すればいいか迷って適当にことば作りました。

*3:ただ、上述の現象が発症したのがSH系の数種だったため、SoftBankで大きなシェアを誇るSH系機種がダメということは、使えないと判断していい思います。

*4:書きかけのエントリに追記すると結構gdgd感が出ちゃうなぁというのが反省点。

twktwk 2008/09/15 18:52 ためになりました。制限したい時と初期設定したい時と合わせて、表になってるとわかりやすいなーとか。。

YudoufuYudoufu 2008/09/17 11:39 >twkさん
お返事遅くなりました><
表ですかー。

機種依存性の強い話ではあるので、全パターンチェックもなかなか難しいかとは思っています。
逆に言うと、制限しようと思ったのに制限できない、というパターンも存在します。
上述の-wap-input-format指定をしても、SoftBankのSH系は制限になるものの、手元の705Pは制限されませんでした。
なので、制限モードをきちんと使うのは逆に至難の技かと思います。

apptaroapptaro 2008/09/24 14:39 つまり結局、3キャリア共通の記述は無理で、DoCoMoはstyle、AUはformat、SoftBankはmodeを使うべし、ということですよね?
AU/SoftBankの場合にistyle+format+modeを全部記述する意味はなさそうですよね?

YudoufuYudoufu 2008/09/25 14:05 >apptaroさん
おそらく、auはformatを使っておけば大丈夫です。
softbankに関しては、もうちょっときちんと調べないとmodeだけで本当にいいかどうかはまだ怪しいところかなーと思っています。ほとんどは大丈夫なんでしょうけど。。。
まぁ、内容の保証をするものではないですが。

lifefeellifefeel 2008/10/10 23:53 SoftBankだと英字に指定すると数字は入力できなくなりますが、英字と数字に限って入力してもらいたい場合は別に仕方ないでしょうか。
私はxhtmlで作っていますので-wap-input-formatだけ使用しています。
いい方法あったら教えてもらえないでしょうか。

YudoufuYudoufu 2008/10/11 18:29 >lifefeelさん
本文にも書いたとおり、SoftBankの場合は-wap-input-formatは使用せず、modeやistyleなどを使用するとよいと思います。

小熊猫小熊猫 2009/03/31 11:05 SHはSoftBank以外でもこの文字制限が起こります。
僕が見つけたのはdocomo。
シェアが高くて実は要注意端末だったりします。

入力制限はもう割り切るしかないですよね。
フォームに関しては文字指定するなら1テンプレ化できないのが現実です。

バラバラな規格誰かまとめてよ。。。。

esecuaesecua 2009/07/17 17:05 全キャリアに言いたい、「一つに統一しろ」と。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証