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
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Регулярные выражения и UTF-8
Покинул форум
Сообщений всего: 16
Дата рег-ции: Нояб. 2007
Помог: 0 раз(а)
Доброго времени суток всем!
Мой скрипт работает со строками в UTF-8, работает корректно. Но появилась необходимость использовать регулярные выражения для работы с русским текстом (вырезать из строки только русские слова и отдавать их в функцию для обработки), сделал это так:
$Text = preg_replace_callback("#[а-я]+#i", "MyFun", $Text);
В функцию приходят обломки слов и знаки вопроса, причём некоторые слова ломаются на несколько частей, например, первый вызов MyFun - вопросик (обозначающий первую букву слова), следующий - две буквы (2я и 3я) и вопросик, потом - ещё вопросик и шестая буква.
Пробовал перед вызовом preg_replace_callback вставить
$Str = iconv("UTF-8", "CP1251", $Str);
а первой строкой MyFun раскодировать обратно в Юникод:
$Matches[0] = iconv("CP1251", "UTF-8", $Matches[0]);
Почему-то работает не всегда. Строку "ААА ББББ ВВВВВ ГГГГГГ" обрабатывает корректно, то же самое маленькими буквами - нет. "Съешь ещё этих мягких французских булок, да выпей чаю" не понимает даже большие буквы.
Я в растерянности. Нет ли какого-то способа использовать регулярные выражения с Юникодом и русским языком? Или хотя бы переводить в другую кодировку на время работы с регэкспами и потом обратно?
Заранее спасибо.
evgenijj
Отправлено: 15 Ноября, 2007 - 13:10:14
Участник
Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006 Откуда: Москва
Прочитал по ссылке о модификаторе u, если его использовать, то всё отлично работает. Огромное спасибо! К сожалению, я плохо знаю английский язык... С ним связаны какие-то проблемы?
Цитата:
iconv - замените на самописную функцию, например на <Код...>
Эти функции не хотели конвертировать буквы от т до я. Причём я нашёл в Сети ещё одну замену iconv() ( http://www[dot]openproj[dot]ru/21/1162/ ), и она тоже не конвертировала эти же буквы. Но, в любом случае, проблема решена. Благодарю за помощь!
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.