Не работает регистронезависимый ключ в регулярках

Тема в разделе "PHP", создана пользователем sasha181, 3 окт 2008.

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

    sasha181 Постоялец

    Регистр.:
    18 апр 2007
    Сообщения:
    100
    Симпатии:
    25
    Не в первый раз сталкиваюсь с такой проблемой.
    На хостингах с Cpanel не работает модификатор i в регулярных выражениях. Может это зависит от какой-нибудь опции php? Кто-нибудь знает, как это побороть?
     
  2. izhukov

    izhukov Писатель

    Регистр.:
    22 сен 2008
    Сообщения:
    5
    Симпатии:
    2
    Строку прогнать через strtolower или strtoupper, это на любителя. И в регулярке использовать соответствующий регистр букв.
     
  3. uNknownMark

    uNknownMark

    Регистр.:
    22 сен 2007
    Сообщения:
    393
    Симпатии:
    169
    sasha181, если сможешь предоставь phpinfo с сервера и строку где ругялрка написана. Попробую тебе помочь!
     
  4. Nafania

    Nafania

    Регистр.:
    24 мар 2007
    Сообщения:
    167
    Симпатии:
    46
    если не работает модификатор i, то скорее всего не сработают и прочие строковые функции, втч strtolower.

    Нужно уточнение - в какой кодировке работает сайт?
    Для какой кодировки соотв. идет регулярка?
    Если регулярка работает для латинских букв, но не работает для русских, то необходимо установить нужную локаль используя setlocale, иначе надо думать.
     
  5. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    558
    Дай посмотреть шаблон - возможно ошибка в самом регулярном выражении.
     
  6. sasha181

    sasha181 Постоялец

    Регистр.:
    18 апр 2007
    Сообщения:
    100
    Симпатии:
    25

    С латинскими буквами регулярка действительно работает верно. Но setlocale к сожалению не помог :(

    Вот код примера, который на денвере возвращает 1, а у хостера 0.

    PHP:
    <?php

    setlocale
    (LC_ALL"ru_RU");

    $text 'большой тебе ПРИВЕТ';

    $patern '/привет|пока/is';

    echo 
    preg_match($patern$text);

    ?>
    http://sasha181.net.ru/phpinfo.php

    Тут можно глянуть инфу о php
    У хостера можно и php5 включить, но результат тот же.
     
  7. Nafania

    Nafania

    Регистр.:
    24 мар 2007
    Сообщения:
    167
    Симпатии:
    46
    PHP:
    setlocale(LC_ALL"ru_RU"); 
    это неверно.
    сайт в какой кодировке?
    доступ по ssh есть?
     
  8. sasha181

    sasha181 Постоялец

    Регистр.:
    18 апр 2007
    Сообщения:
    100
    Симпатии:
    25
    сайт в win-1251
    ssh есть правда в режиме jailed shell
    отстой редкостный :)
    Вы имеете ввиду, что стоит попробовать установить локаль для самого юзера в shell ?



    Сейчас попробовал тот же скрипт на сервере другого хостера (тоже с cpanel)
    результат тот же
    может причина в том, что php работает в режиме cgi через su_php?
    обычно на cpanel именно его используют в последнее время
    хотя конечно это мало вероятно
     
  9. Nafania

    Nafania

    Регистр.:
    24 мар 2007
    Сообщения:
    167
    Симпатии:
    46
    Нет, причина в том, что вы неверно указываете локаль.

    Узнайте установленные локали командой
    Код:
    locale -a | grep ru_RU
    если среди них есть
    ru_RU.CP1251

    то пишите

    PHP:
     setlocale(LC_CTYPE"ru_RU.CP1251");  
    кстати, LC_ALL я использовать не рекомендую - лучше LC_CTYPE

    иначе же вам надо установить локаль командой localedef или просить об этом хостера.
     
    Liver и sasha181 нравится это.
  10. sasha181

    sasha181 Постоялец

    Регистр.:
    18 апр 2007
    Сообщения:
    100
    Симпатии:
    25


    Помогло. ОГРОМНОЕ Вам СПАСИБО за помошь. Сам бы я до этого врядли догадался.
     
Статус темы:
Закрыта.