BUG提交:验证器length中的mb_strlen失效及解决办法

浏览:1058 发布日期:2017/06/29 分类:ThinkPHP5专区
TP版本:5.0.9
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;
        }
    }
希望在下一版本升级中修复。
最佳答案
评论( 相关
后面还有条评论,点击查看>>