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

Статус
В этой теме нельзя размещать новые ответы.

sasha181

Профессор
Регистрация
18 Апр 2007
Сообщения
100
Реакции
39
Не в первый раз сталкиваюсь с такой проблемой.
На хостингах с Cpanel не работает модификатор i в регулярных выражениях. Может это зависит от какой-нибудь опции php? Кто-нибудь знает, как это побороть?
 
Строку прогнать через strtolower или strtoupper, это на любителя. И в регулярке использовать соответствующий регистр букв.
 
sasha181, если сможешь предоставь phpinfo с сервера и строку где ругялрка написана. Попробую тебе помочь!
 
если не работает модификатор i, то скорее всего не сработают и прочие строковые функции, втч strtolower.

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

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


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

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

PHP:
<?php

setlocale(LC_ALL, "ru_RU");

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

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

echo preg_match($patern, $text);

?>

Для просмотра ссылки Войди или Зарегистрируйся

Тут можно глянуть инфу о php
У хостера можно и php5 включить, но результат тот же.
 
PHP:
setlocale(LC_ALL, "ru_RU");

это неверно.
сайт в какой кодировке?
доступ по ssh есть?
 
PHP:
setlocale(LC_ALL, "ru_RU");

это неверно.
сайт в какой кодировке?
доступ по ssh есть?

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



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

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

если среди них есть
ru_RU.CP1251

то пишите

PHP:
 setlocale(LC_CTYPE, "ru_RU.CP1251");

кстати, LC_ALL я использовать не рекомендую - лучше LC_CTYPE

иначе же вам надо установить локаль командой localedef или просить об этом хостера.
 
Нет, причина в том, что вы неверно указываете локаль.

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

если среди них есть
ru_RU.CP1251

то пишите

PHP:
 setlocale(LC_CTYPE, "ru_RU.CP1251");

кстати, LC_ALL я использовать не рекомендую - лучше LC_CTYPE

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



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