• ベストアンサー

HTML_QuickFormでの日本語の扱い・・・

HTML_QuickFormで $form->addRule("name", "名前は10字以内でお願いします", "maxlength", 10, "client"); などと指定して フォームに「あいうえおかきくけこ」などと入力すると、 クライアント側では通るのですが、 どうやらvalidate(サーバー側?)でひっかかってしまうようなのですが・・・ どこに原因があるのでしょうか? どうか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> PEARの該当箇所を開いて、 > $length = strlen($value); > を > $length = mb_strlen($value); > > のように書き換えることでひとまず解決したのですが、 バグでもない箇所を書き換えるのはお勧めしません。 エラーメッセージを変更するのではダメなのでしょうか? 例えば、「名前は半角10文字、または全角5文字以内でお願いします」など それがダメなら、独自ルールを作るのが一番だと思います。 > ここらへん、どの参考書もまったく触れていないのが不思議です・・・ 文字数チェックはバイト単位でのチェック方法が一般的だからだと思います。

madman666
質問者

補足

あれからいろいろと考えてみたのですが、 なるべくスマートにしようと思って $form->addRule("name", "名前は10文字以内で入力してください", "regex", '/^.{1,10}$/', "client"); という、正規表現を使った方法を思いついたのですが、 このような方法はあまり良くないのでしょうか? ぜひアドバイスをお願いします。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

maxlengthに指定する10というのは 10文字ではなく、10byteです。 print strlen('あいうえおかきくけこ'); とした場合に出力される値以上の数値を指定しなくては エラーになるはずです。

madman666
質問者

補足

すみません。質問がすこし変でした; 文字数ではなくバイト数で数えていることはわかったので、 PEARの該当箇所を開いて、 $length = strlen($value); を $length = mb_strlen($value); のように書き換えることでひとまず解決したのですが、 PEARの内容を書き換えることに少し抵抗があるので、 他になにか良い解決方法はないでしょうか? 自分で思いついたものは、 自分で新しいルールを作ることぐらいです; もっとスマートな方法はないでしょうか? ここらへん、どの参考書もまったく触れていないのが不思議です・・・ よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A