Регекспы и русская локаль

WebByte

Проходящий мимо
Регекспы и русская локаль

Под *nix PHP начал ругаться на такую строку кода
PHP:
preg_match_all("`\W*".str_replace("*", "[a-zа-яё]*", $word)."`si", $page, $words);
Дескать,
Warning: Compilation failed: nothing to repeat at offset 4

В качестве $word передается слово в cp1251

Распечатываю первый аргумент preg_match_all
и вижу

`\W*????????[a-zа-яё]*`si

В начале кода стоит
PHP:
setlocale (LC_ALL, "ru_RU.CP1251");
Где собака порыласЬ :(
 

tony2001

TeaM PHPClub
var_dump(setlocale (LC_ALL, "ru_RU.CP1251"));, чтобы выяснить устанавливается ли локаль.
+
`locale -a | grep ru`, чтобы выяснить какие русские локали есть на сервере.
 

WebByte

Проходящий мимо
Локали:
ru_RU, ru_RU.cp1251, ru_RU.iso88595, ru_RU.koi8r, ru_RU.utf8,
russian, ru_UA, ru_UA.koi8u, ru_UA.utf8

вардамп

string(12) "ru_RU.CP1251"
 

tony2001

TeaM PHPClub
стоп.
да у тебя в слове "??????", естественно, что у тебя не валидное выражение получается.
 

WebByte

Проходящий мимо
Да, увидел.
Начал разбираться почему.
Дошел до места вставки данных в базу.
Вот инсёрт перед вставкой.
PHP:
INSERT INTO webbyte4.sm_pages (data) VALUES ('a:3:{s:3:\"url\";s:25:\"http://www.auto-crane.ru/\";s:4:\"word\";s:8:\"автокран\";s:8:\"position\";i:1;}')
А вот SELECT только что вставленного

PHP:
Array
                (
                    [data] => a:3:{s:3:"url";s:25:"http://www.auto-crane.ru/";s:4:"word";s:8:"????????";s:8:"position";i:1;}
                    [id] => 123
                )
 

WebByte

Проходящий мимо
Хм. Но в других местах данные вставляются верно...
Как быть? Где смотреть? Может проблемы в описании таблиц?
Там какое-то "Сравнение" есть, где стоит cp1251_bin

-~{}~ 18.12.04 06:41:

Хм. Сменил на latin1_swedish_ci , которое ставилось по умолчанию при создании таблиц, и вставка заработала...
Спасибо, Тони.
 
Сверху