diff --git a/CHANGELOG.md b/CHANGELOG.md index fc0122183..63c3a680f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ * Fixed `Page::activeChild()` throwing an error [#3276](https://github.com/getgrav/grav/issues/3276) * Fixed `Flex Page` CRUD ACL when creating a new page (needs Flex Objects plugin update) [grav-plugin-flex-objects#115](https://github.com/trilbymedia/grav-plugin-flex-objects/issues/115) * Fixed the list of pages not showing up in admin [#3280](https://github.com/getgrav/grav/issues/3280) + * Fixed text field min/max validation for UTF8 characters [#3281](https://github.com/getgrav/grav/issues/3281) # v1.7.8 ## 03/17/2021 diff --git a/system/src/Grav/Common/Data/Validation.php b/system/src/Grav/Common/Data/Validation.php index 3e0ba32f1..4cba620af 100644 --- a/system/src/Grav/Common/Data/Validation.php +++ b/system/src/Grav/Common/Data/Validation.php @@ -27,7 +27,6 @@ use function is_bool; use function is_float; use function is_int; use function is_string; -use function strlen; /** * Class Validation @@ -239,16 +238,20 @@ class Validation $value = trim($value); } - if (isset($params['min']) && strlen($value) < $params['min']) { + $len = mb_strlen($value); + + $min = (int)($params['min'] ?? 0); + if ($min && $len < $min) { return false; } - if (isset($params['max']) && strlen($value) > $params['max']) { + $max = (int)($params['max'] ?? 0); + if ($max && $len > $max) { return false; } - $min = $params['min'] ?? 0; - if (isset($params['step']) && (strlen($value) - $min) % $params['step'] === 0) { + $step = (int)($params['step'] ?? 0); + if ($step && ($len - $min) % $step === 0) { return false; } @@ -271,11 +274,13 @@ class Validation return ''; } + $value = (string)$value; + if (!empty($params['trim'])) { $value = trim($value); } - return (string) $value; + return $value; } /** @@ -332,7 +337,7 @@ class Validation */ protected static function filterLower($value, array $params) { - return strtolower($value); + return mb_strtolower($value); } /** @@ -342,7 +347,7 @@ class Validation */ protected static function filterUpper($value, array $params) { - return strtoupper($value); + return mb_strtoupper($value); } @@ -534,7 +539,7 @@ class Validation */ protected static function filterNumber($value, array $params, array $field) { - return (string)(int)$value !== (string)(float)$value ? (float) $value : (int) $value; + return (string)(int)$value !== (string)(float)$value ? (float)$value : (int)$value; } /**