日記
HTML_QuickFormのRangeルールで (02:57)Edit

マルチバイト文字を含むテキストの文字数チェックをclientとserverで統一感がある形で実行したい場合は、HTML/QuickForm/Rule/Range.phpを

- $length = strlen($value);
+ $length = mb_strlen($value);

に書き換えちゃうのが一番いいのかなー。でもそれだとpear upgradeしたときに面倒なことになりかねないから、上記のような書き換えを行ったHTML_QuickForm_Rule_RangeJPクラスを別途用意しておいて、あらかじめ、

$rangejp =& new HTML_QuickForm_Rule_RangeJP();
$rr =& HTML_QuickForm_RuleRegistry::singleton();
$rr->registerRule('range', NULL, $rangejp);
$rr->registerRule('minlength', NULL, $rangejp);
$rr->registerRule('maxlength', NULL, $rangejp);

とかrange関係のルールを上書きして使った方がいいのかなー。ひとまず後者にしてみたけど、いまいち美しくない気もする。あと、これだと最終的にバイト数でチェックをしたい場合に、もう一段階ruleをかまさないとならなくなるのがじゃまくさい。

この辺の扱いをきれいにまとめる方法ってないかなー。結局、javascriptで文字列のバイト数チェックを行う関数を書いてそれを使うようにするか、あるいはマルチバイトでサイズチェックを行いたい場合は基本的にclientチェックは使うな、ってことになっちゃうのかな。

Published At2005-05-08 00:00Updated At2005-05-08 00:00