民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS maxlength は何の長さ?(2)

<<   作成日時 : 2009/02/15 06:58   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

maxlength は基本的に、マルチバイト文字だろうが、シングルバイト文字であろうが1文字は1として数える、すなわち、バイト数ではないということは、とりあえず分かった。ブラウザによって解釈の違いはありうるが、現在メジャーなブラウザ(IE および Firefox)ではどちらも「文字数」解釈だ。
HTML のデザインばかりを専門にやっている人はこれでひとまず問題解決なのだろう。
しかし、サーバー側の CGI などもついでに書いてしまうような、趣味レベル〜個人事業レベルの人間にとってはもう一つ頭の痛い問題が出てくる。

サーバー側のスクリプトで、同じようなチェックをしようとした場合、似て非なる文字列操作関数が出てきてしまうのだ。
C で CGI を書く人は最近は少ないかも知れないが、とりあえず C の場合、標準ライブラリで文字列の長さを数えようとすると「バイト数」で数えてしまう。なので、HTML上のmaxlengthと同じ数値を使うと意図しない動作の原因となってしまう。
C はまだシステムよりの言語だと分かっているので予防はしやすいのかも知れない。

PHP だと、strlen を使うとバイト数、mb_strlen を使うと文字数を返してくれる。mb_strlen を使ったほうが、maxlength との対応は取りやすそうだ。
しかし、ここにも落とし穴が。
CakePHP などのフレームワークを使った場合、一般的には、直接 mb_strlen や strlen を使うのではなく、フレームワーク組み込みの機能で文字数を確認することになる。
array( 'rule' => array('maxLength', '15')...
といった形で。
こうなると、結局、CakePHP のソースを読んで、この機能がどう実装されているのかまで確認しないと、安心してコーディングすることができなくなってしまう(ちなみに、CakePHP では strlen が呼び出されているので、バイト数で処理されている)。

結局のところ、こういった文字列カウントの機能を使う場合は、「必ず一度テストする」習慣をつけるしかないようだ。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
maxlength は何の長さ?(2) 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる