Cart.php в системе / библиотеке имеет определение шаблона регулярного выражения, которое не позволяет мне использовать арабский язык для значений имени. Это работает:
$data = array( 'id' => "221212", 'qty' => 1, 'price' => 21.2, 'name' => 'dasdasdas' );
Но это терпит неудачу из-за арабского в имени:
$data = array( 'id' => "221212", 'qty' => 1, 'price' => 21.2, 'name' => 'عمر' );
Теперь в классе Cart.php я нашел следующее:
// These are the regular expression rules that we use to validate the product ID and product name var $product_id_rules = '\.a-z0-9_-'; // alpha-numeric, dashes, underscores, or periods var $product_name_rules = '\.\:\-_a-z0-9'; // alphanumeric, dashes, underscores, colons or periods
Я занимаюсь правилами имени. Ясно, что это проблема, потому что позже есть проверка:
if ( ! preg_match("/^[".$this->product_name_rules."]+$/i", $items['name'])) { log_message('error', 'An invalid name was submitted as the product name: '.$items['name'].' The name can only contain alpha-numeric characters, dashes, underscores, colons, and spaces'); return FALSE; }
Как заменить строку правил имен для работы с арабским? У меня очень плохой фон с регулярным выражением, поэтому, пожалуйста, помогите.
Благодаря!
Если вы хотите принимать другие символы, вам необходимо изменить $ this-> cart-> product_name_rules после загрузки корзины.
$this->load->library('cart'); $this->cart->product_name_rules = '\.a-z0-9_-\p{Arabic}';
Он будет работать, если вы измените свой шаблон $product_name_rules
(partial) следующим образом:
var $product_name_rules = '\.\:\-_a-z0-9\p{Arabic}';
… затем добавьте модификатор /u
к шаблону, фактически используемому preg_match
:
if ( ! preg_match("/^[".$this->product_name_rules."]+$/iu", $items['name'])) { ... }
Цитирование документа :
u (PCRE_UTF8)
Этот модификатор включает дополнительные функции PCRE, которые несовместимы с Perl. Строки шаблонов рассматриваются как UTF-8. Этот модификатор доступен с PHP 4.1.0 или выше в Unix и с PHP 4.2.3 на win32. Срок действия шаблона UTF-8 проверяется с PHP 4.3.5.
Измените product_name
на следующее, что позволяет все:
var $product_name_rules = '^.'