プロが教えるわが家の防犯対策術!

HTML_QuickFormで
$form->addRule("name", "名前は10字以内でお願いします", "maxlength", 10, "client");

などと指定して
フォームに「あいうえおかきくけこ」などと入力すると、
クライアント側では通るのですが、
どうやらvalidate(サーバー側?)でひっかかってしまうようなのですが・・・

どこに原因があるのでしょうか?

どうか教えてください。

A 回答 (2件)

maxlengthに指定する10というのは


10文字ではなく、10byteです。

print strlen('あいうえおかきくけこ');

とした場合に出力される値以上の数値を指定しなくては
エラーになるはずです。

この回答への補足

すみません。質問がすこし変でした;

文字数ではなくバイト数で数えていることはわかったので、
PEARの該当箇所を開いて、
$length = strlen($value);

$length = mb_strlen($value);

のように書き換えることでひとまず解決したのですが、
PEARの内容を書き換えることに少し抵抗があるので、
他になにか良い解決方法はないでしょうか?

自分で思いついたものは、
自分で新しいルールを作ることぐらいです;
もっとスマートな方法はないでしょうか?

ここらへん、どの参考書もまったく触れていないのが不思議です・・・

よろしくお願いします。

補足日時:2008/04/10 11:39
    • good
    • 0

> PEARの該当箇所を開いて、


> $length = strlen($value);
> を
> $length = mb_strlen($value);
>
> のように書き換えることでひとまず解決したのですが、
バグでもない箇所を書き換えるのはお勧めしません。

エラーメッセージを変更するのではダメなのでしょうか?
例えば、「名前は半角10文字、または全角5文字以内でお願いします」など

それがダメなら、独自ルールを作るのが一番だと思います。

> ここらへん、どの参考書もまったく触れていないのが不思議です・・・
文字数チェックはバイト単位でのチェック方法が一般的だからだと思います。

この回答への補足

あれからいろいろと考えてみたのですが、
なるべくスマートにしようと思って

$form->addRule("name", "名前は10文字以内で入力してください", "regex", '/^.{1,10}$/', "client");

という、正規表現を使った方法を思いついたのですが、
このような方法はあまり良くないのでしょうか?

ぜひアドバイスをお願いします。

補足日時:2008/04/12 17:33
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!