[cakephp] 全角文字の文字数バリデートチェック
移転しました。
cakephp で maxLength を使用してバリデートしようとすると、全角文字は2文字として数えられてしまい、文字数チェックがうまく行えない。
そんな時は以下の方法で、解決できる。
※環境にあわせて、エンコーディング文字を指定すること!
以下のように指定する。以下引用
CakePHPの文字数チェックバリデーションの全角文字対応。まずAppModelに次のメソッド追加。 <?php class AppModel extends Model { /** * 全角対応文字数チェック */ function maxLengthJp($check, $max) { $check_str = array_shift($check); $length = mb_strlen($check_str, mb_detect_encoding($check_str)); // EUCとかの場合、エンコーディング指定しておく // $length = mb_strlen($check_str, mb_detect_encoding($check_str,"euc")); return ($length <= $max); } } ?> んで、モデルのバリデーション設定時に、作ったバリデーションメソッドを指定する。 <?php class User extends AppModel { var $name = 'User'; var $validate = array( 'nickname' => array( 'maxLengthJp' => array( 'rule' => array('maxLengthJp', '20') ), … ?>