From fc523f368ef27765e9bfd69378f5e628a9e98f8e Mon Sep 17 00:00:00 2001 From: rGaillard Date: Fri, 16 Nov 2012 11:04:27 +0000 Subject: [PATCH] [-] Core: fix regular expression patterns for some hosting which don't support unicode --- classes/Tools.php | 12 ++++++++++++ classes/Validate.php | 10 +++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/classes/Tools.php b/classes/Tools.php index 7d4e4fe76..c6022516b 100644 --- a/classes/Tools.php +++ b/classes/Tools.php @@ -2247,6 +2247,18 @@ FileETag INode MTime Size else return array_unique($array, SORT_REGULAR); } + + /** + * Delete unicode class from regular expression patterns + * @param string $pattern + * @return pattern + */ + public static function cleanNonUnicodeSupport($pattern) + { + if (!defined('PREG_BAD_UTF8_OFFSET')) + return $pattern; + return preg_replace('/\\\[px]\{[a-z]\}{1,2}|(\/[a-z]*)u([a-z]*)$/i', "$1$2", $pattern); + } } /** diff --git a/classes/Validate.php b/classes/Validate.php index 1106087a8..56f418502 100644 --- a/classes/Validate.php +++ b/classes/Validate.php @@ -45,7 +45,7 @@ class ValidateCore */ public static function isEmail($email) { - return !empty($email) && preg_match('/^[a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]+[.a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]*@[a-z\p{L}0-9]+[._a-z\p{L}0-9-]*\.[a-z0-9]+$/ui', $email); + return !empty($email) && preg_match(Tools::cleanNonUnicodeSupport('/^[a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]+[.a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]*@[a-z\p{L}0-9]+[._a-z\p{L}0-9-]*\.[a-z0-9]+$/ui'), $email); } /** @@ -131,7 +131,7 @@ class ValidateCore */ public static function isCarrierName($name) { - return empty($name) || preg_match('/^[^<>;=#{}]*$/u', $name); + return empty($name) || preg_match(Tools::cleanNonUnicodeSupport('/^[^<>;=#{}]*$/u'), $name); } /** @@ -153,7 +153,7 @@ class ValidateCore */ public static function isName($name) { - return preg_match('/^[^0-9!<>,;?=+()@#"°{}_$%:]*$/u', stripslashes($name)); + return preg_match(Tools::cleanNonUnicodeSupport('/^[^0-9!<>,;?=+()@#"°{}_$%:]*$/u'), stripslashes($name)); } /** @@ -175,7 +175,7 @@ class ValidateCore */ public static function isMailName($mail_name) { - return preg_match('/^[^<>;=#{}]*$/u', $mail_name); + return preg_match(Tools::cleanNonUnicodeSupport('/^[^<>;=#{}]*$/u'), $mail_name); } /** @@ -186,7 +186,7 @@ class ValidateCore */ public static function isMailSubject($mail_subject) { - return preg_match('/^[^<>]*$/u', $mail_subject); + return preg_match(Tools::cleanNonUnicodeSupport('/^[^<>]*$/u'), $mail_subject); } /**