Как парсить русский текст с помощью preg_match?

Тема в разделе "PHP", создана пользователем qwyjibo, 6 фев 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. qwyjibo

    qwyjibo Постоялец

    Регистр.:
    27 янв 2009
    Сообщения:
    64
    Симпатии:
    12
    Пробую парсить русский текст, но функция preg_match как будто не понимает русские буквы (русский текст есть частью регулярного выражения). Подскажите, пожалуйста, в чем проблема. Заранее спасибо.
     
  2. anarki

    anarki Прохожие

    UTF используется?
     
  3. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    Возможно не совпадают кодировки текста и страницы, тогда надо текст конвертировать в кодировку страницы:
    PHP:
    $nulled iconv("utf-8","windows-1251""абВгд");
    $match iconv("utf-8","windows-1251""/^[А-ЯЁё]+$/i");
    echo 
    preg_match($match$nulled) ? "есть" "нет";
     
    qwyjibo нравится это.
  4. qwyjibo

    qwyjibo Постоялец

    Регистр.:
    27 янв 2009
    Сообщения:
    64
    Симпатии:
    12
    Всем спасибо. Проблема решилось перекодировкой всего текста из utf-8 в windows-1251 - в этой кодировке все теперь работает отлично.
     
  5. Spirg

    Spirg Писатель

    Регистр.:
    1 окт 2008
    Сообщения:
    11
    Симпатии:
    1
    спс, помогли, я вот тоже давно искал
     
  6. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    если кодировка utf-8..в регулярке ^[А-ЯЁё]+$/i ставьте ключ u ^[А-ЯЁё]+$/ui
    # Правильно распознает кириллицу только «Character range» с ключем «/u» и модификатор «\pL», означающий «Unicode letter»
    # Модификатор «\w» с кириллицей не работает вообще, даже ключ «/u» не помогает

    Добавлено через 22 минуты
    Забыл сказать,ориентируйте свои проекты сразу под utf-8 без бума..
     
    qwyjibo нравится это.
  7. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    975
    Симпатии:
    255
    Сталкивался с такой проблемой. На виндовс хостинге было все ОК. на Unix - вообще пропадали русские буквы. Решение простое: Нужно установить локаль.

    setlocale(LC_ALL, 'ru_RU.CP1251');
    Ну или вашу другую кодировку.
     
  8. anarki

    anarki Прохожие

    есть замена :)

    В процессе обсуждения пришли к следующей замене «\w»: либо рекомендованный конгломерат «(?:\p{L}|\p{M}|\p{D}|\p{Pc})», либо «[\p{L}\p{Nd}]» (если хочется покороче).


    может пригодится кому статья

    http://habrahabr.ru/blogs/php/45910/
     
  9. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    Для кодировки windows-1251
    AddDefaultCharset windows-1251
    Ддя кодировки utf-8
    AddDefaultCharset utf-8

    или если нет доступа к серверу
    <?php header("Content-Type: text/html; charset=utf-8"); ?>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    или В .htaccess поставить
    AddDefaultCharset utf-8

    При выводе из бд
    mysql_query("SET NAMES 'utf8'");
     
  10. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Какое отношение это имеет к парсингу текста?
     
Статус темы:
Закрыта.