Регулярные выражения, UTF-8, Русский, \b - проблемы

  • Автор темы Автор темы Name
  • Дата начала Дата начала

Name

Новичок
Регулярные выражения, UTF-8, Русский, \b - проблемы

$str = "Тестовая строка по русски в UTF-8";
$pattern = "#\bрусски\b#u";
preg_match($pattern, $str, $match);

Не работает. Почему? Что делать? :)


PHP:
$str = "Тестовая строка по русски в UTF-8";

$pattern = "#\bрусски\b#u"; // не работает
$pattern = "#русски#u"; // работает

preg_match($pattern, $str, $match);

echo '<pre>', print_r($match, 1), '</pre>';
 
Специальные символы \b \w и т.д. чувствительны к системной локали.
Для правильной обработки необходимо задавать локаль. Например так:

PHP:
setlocale(LC_ALL,"ru_RU.cp1251");

мне помогло, попробуйте...
 
а локаль на сервере установлена?

и - да, если второй апач, собранный с mpm отличным от prefork, то все что могу посоветовать это выбросить его. правда, в этом случае бы было не "не работает", а "иногда не работает" =)
 
locale C

потом ставиться setlocale(LC_ALL, 'ru_RU.utf8', 'ru_RU.utf-8', 'ru_RU');
Apache/1.3.37 (Unix) PHP/5.2.1
 
а что setlocale(LC_ALL, 0) выдает после попытки изменить локаль?
 
значит нету у тебя на сервере utf-8 или она по-другому называется, например, ru_RU.utf8 (так у меня), не заметил, что у тебя тоже такой вариант есть
shell команда 'locale -a' выдает список установленных локалей
 
ну почему нету?
На обоих серверах поставленые locale присутствуют при locale -a

Я проверял на двух серверах, нигде не пашет.

1. setlocale(LC_ALL, 'ru_RU.utf8', 'ru_RU.utf-8', 'ru_RU');
locale ставиться в ru_RU.utf8

2. setlocale(LC_ALL, 'ru_RU.utf8', 'ru_RU.utf-8', 'ru_RU');
locale ставиться в ru_RU.utf-8
 
var_dump( setlocale(LC_ALL, 'ru_RU.utf8', 'ru_RU.utf-8', 'ru_RU') );
что выдает?

-~{}~ 10.02.09 23:28:

странно, у меня под Windows работает, а под Unix - нет
 
Unix
setlocale(LC_ALL, NULL) = C
setlocale(LC_ALL, 'ru_RU.utf8', 'ru_RU.utf-8', 'ru_RU') = ru_RU.utf8

--------------
Mac
setlocale(LC_ALL, NULL) = C
setlocale(LC_ALL, 'ru_RU.utf8', 'ru_RU.utf-8', 'ru_RU') = ru_RU.utf-8
 
Name так чего ж ты на вопрос "а что setlocale(LC_ALL, 0) выдает после попытки изменить локаль?" отвечаешь "C"

по поводу Windows протупил, там, похоже, нельзя utf-8 задать в setlocale

а под Unix у меня тоже не работает

-~{}~ 11.02.09 00:06:

есть подозрение, что поддержка utf-8 не скомпилирована (http://marc.info/?l=php-i18n&m=118303425505336&w=2)
 
x-yuri
есть подозрение, что поддержка utf-8 не скомпилирована (http://marc.info/?l=php-i18n&m=...5505336&w=2)
Я правильно понимаю, что для проверки этого достаточно выполнить код if (!preg_match('/\pL/u', 'a')) die('bastard'); и если он выдаст bastard, то поддержка UTF-8 не скомпилирована?

У меня этот код отрабатывает без ошибок, но пример Name с \b тоже не работает. OS OpenSuSE 11.0, локаль ru_RU.UTF-8. Запускал примеры из консоли.
 
Сверху