Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Регулярные выражения
Форумы портала PHP.SU » » Кодировки и все смежное » Регулярные выражения

Страниц (1): [1]
 

1. unnomen - 19 Марта, 2015 - 18:41:10 - перейти к сообщению
Проблема такая:

При написании регулярных выражений PHP не выводит русский текст.
Вот пример:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $pattern = '/[0-9]+.[а-я]+/';
  3. $subject = '21 человек';
  4. preg_match($pattern, $subject, $m);

выдаёт
CODE (html):
скопировать код в буфер обмена
  1. array(1) { [0]=> string(4) "21 С" }

Если использую то же самое, только на латинице
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $pattern = '/[0-9]+.[a-z]+/';
  3. $subject = '21 people';
  4. preg_match($pattern, $subject, $m);

то получаю на выходе правильный ответ:
CODE (html):
скопировать код в буфер обмена
  1. array(1) { [0]=> string(9) "21 people" }


Как можно настроить работу скрипта на русский язык? Желательно использовать кодировку cp1251, т.к. в будущем нужно будет иметь связь с БД, там данные в этой кодировке хранятся.
2. unnomen - 19 Марта, 2015 - 19:08:06 - перейти к сообщению
Проблему решил изменением кодировки самого документа php на cp1251. По дефолту почему-то стояла кодировка utf-8.
3. unnomen - 19 Марта, 2015 - 21:32:18 - перейти к сообщению
Ещё как вариант, подошёл модификатор u
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header('Content-Type: text/html; charset=utf-8');
  3. $pattern = '/[0-9]+.[а-я]+/u';
  4. $subject = '21 человек';
  5. preg_match($pattern, $subject, $m);

 

Powered by ExBB FM 1.0 RC1