[cakephp] 全角文字の文字数バリデートチェック

移転しました。

cakephp で maxLength を使用してバリデートしようとすると、全角文字は2文字として数えられてしまい、文字数チェックがうまく行えない。
そんな時は以下の方法で、解決できる。

参考URL

※環境にあわせて、エンコーディング文字を指定すること!

以下のように指定する。以下引用

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')
		),
		…
?>