Зарабатываем рекламируя аукцион Zeekler » Создай свой блог!
Web-технологии
+ еще кое-что
 
#PHP→ strtolower не работает в PHP
Иногда при переходе на другой хостинг, или при установке новой версии PHP, перестает работать функция strtolower. Она начинает возвращать ту же строку, что и принимала, без приведения в нижний регистр. Это происходит из-за того, что неверно выставлена языковая локаль, и PHP не понимает, каким символам нижнего регистра должны соответствовать вводимые символы верхнего регистра. Проблема решается следующим образом.

 

Надо установить локаль. В windows это делается установкой переменной окружения LC_ALL в соответствующее значение (какое именно – описано ниже). Однако, если нет такой возможности, можно вызывать где-нибудь в главном или конфигурационном скрипте функцию установки локали в PHP setlocale (http://www.php.net/manual/en/function.setlocale.php). В руководстве PHP описано, какие значения и для каких целей можно устанавливать. Например,

setlocale(LC_ALL, "ru_RU.CP1251");

Однако, мало установить значение. Нужно еще и проверить, что установилось:

var_dump(setlocale(LC_ALL, "ru_RU.CP1251"));

так как функция setlocale возвращает false если не удалось установить локаль или имя локали, если удалось установить, это позволит убедиться в правильности выбранной настройки.

В вышеупомянутом разделе руководства PHP есть небольшая сноска для пользователей windows: http://msdn.microsoft.com/en-us/library/39cwe7zf(vs.71).aspx

из этого следует, что в windows правильным обозначением русской языковой локали является строка «rus». Таким образом, нужно использовать следующий простой вызов:

setlocale(LC_ALL, "rus");

либо, как вариант:

setlocale(LC_ALL, "Russian_Russia.1251");

Очевидно, данное решение применимо также если не работает функция strtoupper.

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

Редкостные извращенцы советуют использовать mb_strtolower (http://www.php.net/manual/en/function.mb-strtolower.php) вместо обычного strtolower, что в общем-то работать будет, но вам придется переписывать весь код. Кроме того, функция mb_strtolower более требовательна к ресурсам, поэтому не удивляйтесь, если ваш код начнет сильно тормозить. Для данного говно-метода расширение Multibyte String должно быть установлено, что также не на всех хостингах возможно. Используйте Multibyte String только по его прямому назначению, никогда не забивайте гвозди микроскопом.

Ну и напоследок, наиболее фееричный и ужасный способ перевода из верхнего регистра в нижний, который часто встречается в интернете:

$string = strtr( $string, 'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ', 'йцукенгшщзхъфывапролджэячсмитьбюё' );

Народ тупо и банально советует простым перебором, забив русский алфавит, заменять букву верхнего регистра на аналог в нижнем регистре. Это невообразимый пример говнокода, так никогда не надо делать.

 


1
← предыдущий пост | следующий пост →
 
комментарии Комментарии пользователей (0):
Нет ни одного комментария, вы можете быть первым!
 
Чтобы оставить комментарий необходимо быть зарегистрированным пользователем сервиса WMPUBLIC.COM или авторизоваться если вы уже зарегистрированны.
Персональный блог
Web-технологии
Установите Тулбар WMPUBLIC в свой браузер »
Орифлейм каталог онлайн.Заказ продукции »
До 1$ на автопилоте без рефералов. НЕ пожалеете. »
Хороший форекс партнер »
Деньги в сети есть, надо только уметь их взять »
Читаешь письма на 8 сайтах и имеешь копейки?Хватит »
Работай со мной обучение и заработок гарантирую! »
Первый сервис реального заработка. »
Работа в интернет. Источник дохода. »
прибыльный сайт »


Владелец: (№256551) (278.356)
Статус: Новичок (1 уровень)
Тип: пользователь  Offline
© 2008-2012 WMPUBLIC.COM