PHP版本:PHP 5.4.9
看了一下源码,的确是用了mb_strlen的,但是依然把汉字统计为3个,应该是代码不严谨而导致的BUG:
文件:
\thinkphp\library\think\Validate.php
将:
$length = mb_strlen((string) $value);
改为:(增加UTF-8参数)$length = mb_strlen((string) $value,'UTF-8');
即可正常判断。完整代码如下:
/**
* 验证数据长度
* @access protected
* @param mixed $value 字段值
* @param mixed $rule 验证规则
* @return bool
*/
protected function length($value, $rule)
{
if (is_array($value)) {
$length = count($value);
} elseif ($value instanceof File) {
$length = $value->getSize();
} else {
$length = mb_strlen((string) $value,'UTF-8'); // 改这行
}
if (strpos($rule, ',')) {
// 长度区间
list($min, $max) = explode(',', $rule);
return $length >= $min && $length <= $max;
} else {
// 指定长度
return $length == $rule;
}
}
希望在下一版本升级中修复。 最佳答案
