воскресенье, 10 февраля 2013 г.

что такое нижний реестр

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

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

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

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

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

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

setlocale(LC_ALL, "Russian_Russia.1251");

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

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

В вышеупомянутом разделе руководства PHP есть небольшая сноска для пользователей windows:

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

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

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

setlocale(LC_ALL, "ru_RU.CP1251");

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

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

понедельник, 21 ноября 2011 г.

strtolower не работает в PHP

Комментариев нет:

Отправить комментарий