UTF-8 текст в strtoupper и т.п.

2ka

Новичок
UTF-8 текст в strtoupper и т.п.

Господа, у меня сайт на UTF-8(winxpsp2, php 4.4.2[только модуль mbstring.dll]). Ставлю локаль:
Код:
setlocale(LC_ALL, "Russian_Russia.65001");
или
Код:
setlocale(LC_ALL, "ru_RU.UTF-8"); // пробовал и массивы и много разных вариантов
, но функция strtoupper() не работает, вернее работает с "краказяблами". Установил mbstring.dll, возникли проблемы с preg_replace. Выражение:
PHP:
$text = preg_replace("/[^\w\s-]/" ,  '', $text);
Обрезает, например, "т"(привет = приве)
а:
PHP:
$text = preg_replace("/[^\w\s-]/u" ,  '', $text);
вообще ничего не выводит

Как то проблемно все... iconv - нет. Хотя и без него хотелось бы.

Не подскажите, как можно локалью, или чем-нибудь еще позволить пользоваться привычными функциями, но с UTF-8
 

white phoenix

Новичок
> [^\w\s-]
'-' внутри символьного класса является метасимволом и для записи литералом требует упреждающий '\'.
> с UTF-8
[m]reference.pcre.pattern.modifiers[/m]: u (PCRE_UTF8)
 

2ka

Новичок
white phoenix
Попробуйте просто запустить:
PHP:
<?php
     echo preg_replace("/[^\w\d\-]/u" ,  '', "привет");
     echo "<hr />";
     echo preg_replace("/[^\w\d\-]/" ,  '', "привет");
?>
У меня, с "u" ничего не выводит, без, выводит "приве"
 

2ka

Новичок
white phoenix
эт не запятая, наверное, т.к. hex '‚' = 82, запятая = 2C.

если же так пишу:
PHP:
echo preg_replace("/[^\w\d\-т]/u" ,  '', "привет");
то все работает, но это же не дело писать "[а-я]"... Как считаете?

p.s. т в UTF-8, выглядит как "C," = [^\w\d\-C,]

может ли это быть багом PHP? ведь "т" = "\w"
 

white phoenix

Новичок
2ka
[m]reference.pcre.pattern.syntax[/m]:
"word" символ - это произвольная цифра, буква или символ подчеркивания, проще говоря, любой символ, который может являться частью 'слова' в Perl. Определение букв и цифр управляется символьными таблицами, с которыми PCRE был собран. И, как следствие, эти наборы могут отличаться в различных локализированных дистрибутивах. Например, в локали "fr" (Франция) некоторые символы с кодом выше 128 используются для записи ударных символов и, соответственно, соответствуют маске \w.
 
Сверху