angry.creater
Новичок
Классика: preg_match и кириллица в UTF-8
Господа!
Перерыв инет, маны и что там ещё за последние ~15-16 часов без сна и редкими перекурами, я понял, что у меня на голове не достаёт большей части волос...
дабы не оторвать себе скальп начисто, прошу посильной помощи.
Проблема
для любой кириллической строки в UFT-8 не работают preg_* ф-ции регулярных выражений.
пример:
результат работы скрипта: not chars!
Далее, если заменить строку 'русский' на 'english', скрипт сообщает, что строка собственно является строкой, то есть: chars!
игра с модификатором u в '/[^\w]/u' ни к чему не привела, ровна как и сами вариации (порядка 20 различных вариантов из инета и других форумов) так же не дала ожидаемых результатов.
Явное задание UFT-8, закомментирование и прочие пляски с default_charset так же успехом не увенчались
ИНФА:
php: php-5.2.6 (Win32)
кодировка самого скрипта: ессно UTF-8
ВОПРОСЫ:
1. Работают ли preg_* регулярки PHP с кириллицей в UTF-8 ?
(я слышал, что поддержка модификатора /i - не работает, но остальное вроди-как работать должно)
2. где я ошибаюсь, как следует писать, что бы preg_match('/[^\w]/u', 'русский') работало так, как и ожидается (например, для cp1251 ф-ция отрабатывает корректно)
Большое спасибо, вы мне действительно поможите, если разъясните суть дела, у меня самого руки уже опустились...
~~~
но, регулярка
кириллицу в UFT-8 распознаёт корректно.
Однако, такой подход меня не устраивает, так я хочу привязываться ИМЕННО К КЛАССАМ СИМВОЛОВ, а не конкретный набор диаппазона строк на том или ином языке.
и тогда:
ВОПРОСЫ:
1. Работают ли preg_* регулярки PHP с кириллицей в UTF-8 в случае использования КЛАССА СИМВОЛОВ?
(я слышал, что поддержка модификатора /i - не работает, но остальное вроди-как работать должно)
2. где я ошибаюсь, как следует писать, что бы preg_match('/[^\w]/u', 'русский') работало так, как и ожидается (например, для cp1251 ф-ция отрабатывает корректно)
Господа!
Перерыв инет, маны и что там ещё за последние ~15-16 часов без сна и редкими перекурами, я понял, что у меня на голове не достаёт большей части волос...
дабы не оторвать себе скальп начисто, прошу посильной помощи.
Проблема
для любой кириллической строки в UFT-8 не работают preg_* ф-ции регулярных выражений.
пример:
PHP:
setlocale(LC_CTYPE, array('ru_RU.utf8', 'ru_UA.utf8'));
setlocale(LC_ALL, array('ru_RU.utf8', 'ru_UA.utf8'));
$ary = array();
if (preg_match('/[^\w]/u', 'русский', $ary)) {
print "not chars!";
print_r($ary);
} else {
print "chars!";
print_r($ary);
}
Далее, если заменить строку 'русский' на 'english', скрипт сообщает, что строка собственно является строкой, то есть: chars!
игра с модификатором u в '/[^\w]/u' ни к чему не привела, ровна как и сами вариации (порядка 20 различных вариантов из инета и других форумов) так же не дала ожидаемых результатов.
Явное задание UFT-8, закомментирование и прочие пляски с default_charset так же успехом не увенчались
ИНФА:
php: php-5.2.6 (Win32)
кодировка самого скрипта: ессно UTF-8
ВОПРОСЫ:
1. Работают ли preg_* регулярки PHP с кириллицей в UTF-8 ?
(я слышал, что поддержка модификатора /i - не работает, но остальное вроди-как работать должно)
2. где я ошибаюсь, как следует писать, что бы preg_match('/[^\w]/u', 'русский') работало так, как и ожидается (например, для cp1251 ф-ция отрабатывает корректно)
Большое спасибо, вы мне действительно поможите, если разъясните суть дела, у меня самого руки уже опустились...
~~~
но, регулярка
PHP:
if (preg_match('/^[^0-9A-Za-zА-Яа-яЁё]+$/u', 'русский')
Однако, такой подход меня не устраивает, так я хочу привязываться ИМЕННО К КЛАССАМ СИМВОЛОВ, а не конкретный набор диаппазона строк на том или ином языке.
и тогда:
ВОПРОСЫ:
1. Работают ли preg_* регулярки PHP с кириллицей в UTF-8 в случае использования КЛАССА СИМВОЛОВ?
(я слышал, что поддержка модификатора /i - не работает, но остальное вроди-как работать должно)
2. где я ошибаюсь, как следует писать, что бы preg_match('/[^\w]/u', 'русский') работало так, как и ожидается (например, для cp1251 ф-ция отрабатывает корректно)