Регулярка и кириллица

Тема в разделе "Регулярные выражения", создана пользователем rasandrey, 3 фев 2011.

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

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    В общем проблема такая. Есть код

    PHP:
    $str 'Абракадабра, и остальное... Abrakadabra' ;
    $str preg_replace("|[^\d\w ]+|i","-",$str); 
    Регуляркой заменияю все знаки препинания на "-", чтоб остались только слова. Все бы хороше, НО почему-то вырезает кирилицу, оставляет только латинские символы!

    В чем может быть проблема? Или подскажите как еще можно заменить знаки?
     
  2. CnecHa3

    CnecHa3 Постоялец

    Регистр.:
    10 фев 2007
    Сообщения:
    105
    Симпатии:
    20
    PHP:
    $str 'Абракадабра, и остальное... Abrakadabra' ;
    $str preg_replace("/[^\d\wа-яА-ЯёЁ]/iu","-",$str);
    var_dump($str);//string(60) "Абракадабра--и-остальное----Abrakadabra" 
     
  3. dazed

    dazed

    Регистр.:
    31 мар 2007
    Сообщения:
    208
    Симпатии:
    55
    Возможно так настроен сервер, я стараюсь не использовать спец символ \w, а пишу a-zа-я, так же всегда в синтаксисе выставляю /si
    Буквами когда пишешь, во первых для глаз приятнее, во второых более точная работа на разных настройках.
     
  4. Alexitdv

    Alexitdv

    Регистр.:
    4 янв 2008
    Сообщения:
    161
    Симпатии:
    65
    Кодировка какая?

    При траблах с кодировками юзай mbstring. А точнее mb_ereg_replace
     
  5. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    у меня сайт в cp1251, а это работает, как я понял, c UTF8 т.к. пишет ошибку

    Код:
    Warning: preg_replace() [function.preg-replace]: Compilation failed: invalid UTF-8 string at offset 7 in Z:\home\selects\www\s\index.php on line 5
    NULL 
     
  6. CnecHa3

    CnecHa3 Постоялец

    Регистр.:
    10 фев 2007
    Сообщения:
    105
    Симпатии:
    20
    Если быть точным, то ф-ция mb_ereg_replace и всё семейство ereg... начина с PHP 5.3 не рекомендуется. :))

    Добавлено через 4 минуты
    попробуй поставить в начале файл:
    PHP:
    setlocale(LC_ALL"russian","ru_RU.CP1251");
     
  7. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    А кодировка файла случаем не UTF?
     
  8. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    не помогло, такая же ошибка

    Добавлено через 28 секунд
    нет CP1251
     
  9. CnecHa3

    CnecHa3 Постоялец

    Регистр.:
    10 фев 2007
    Сообщения:
    105
    Симпатии:
    20
    Поставь UTF-8 чтобы кодировка была универсальной, чуть больше размер файл, но зато любой язык видишь)
     
  10. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    Если будет кодировка файла utf8, а сайта в целом cp1251, то все равно отображаться будет криво. В htaccess я задаю кодировку вручную, это обязательно
     
Статус темы:
Закрыта.