人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PEARのQuickFormに関する質問です。
$form->addRuleでmaxlengthを50とした場合、全角文字では単純に÷2の25文字ではないのですか?
全角で16文字を超えるとエラーとなります。
100を指定すると33文字を超えると同じくエラーとなります。
また、minlengthでも同様の文字数で弾かれます。

アルファベットや数字の半角では、当然でしょうが50文字では通過し51文字では通過しなくなり正常に動作します。
全角では特殊な計算法があるのでしょうか?
よろしくお願いします。

$form->addRule('form_value01', '文章が長すぎます', 'maxlength', 50, 'server');

●質問者: appfb
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
●100ポイント ベストアンサー

使える文字数の少なかった古いJISコードでは全角2バイトだったわけですが、
JIS2004などの新しい規格や、UTFなどの国際規格では、
文字によって3バイトや4バイトになります。

QuickFormのmaxlengthはマルチバイトには非対応なので、
半角英数50文字(50Byte)だと全角16文字(3x16=48Byte)までしか入らないことになります。

案1)QuickFormを改造
strlenの部分をマルチバイト対応のmb_strlenに書き換えることで対応可能ですが、
PEARのアップデートで動かなくなるので推奨はしません。

案2)データベースの構造に合わせる
格納するカラムが100Byteだったらmaxlengthも100にするという単純な思考

案3)クライアントサイドスクリプトに頼る
JQueryなどのライブラリに頼るのが最近のパターン

おおよそ案2で問題になることはないと思いますが、
対外的に厳格な対応をしたいならば、案3でクライアント側でのチェックを行い、さらに値を受け取るphp側でもチェックするというような二重の対策が必要になってくるでしょう。


appfbさんのコメント
引き続き、ご回答ありがとうございます。 > JIS2004などの新しい規格や、UTFなどの国際規格では、文字によって3バイトや4バイトになります。 全く知りませんでしたorz 正常に機能していただけなのですね。 早速、いただきました(案3)を調べたいと思います。 ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ