1

Topic: Почему не работает функция strtolower() на php

Иногда, при работе с текстов в PHP, приходится сталкиваться с «неверной» работой ряда  функций:
strtolower и strtoupper – текст не меняет свой регистр.
substr – «промахивается при обрезании в два раза».
strpos и т.д. – возвращают неверный результат.
Все эти проблемы связаны с кодировкой текста!
Обычно из-за того, что функции применяются к строкам в UTF-8, а не в windows-1251 (CP1251).

2

Re: Почему не работает функция strtolower() на php

Варианты решения:

Использовать альтернативные функции для работы с Multibyte String. Все они начинаются с префикса mb_ : mb_strtolower, mb_substr, mb_strpos… но: для работы таких функций, на сервере требуется расширение php_mbstring

Правильно установить "родную" кодировку:

// устанавливаем русскую кодировку
setlocale(LC_ALL, "ru_RU.CP1251");
// переводим в нижний регистр
$string = strtolower( $string );

Можно сначала переконвертировать строку в windows-1251, проделать нужные операции, а затем результат перевести в UTF-8

// из utf-8 в windows-1251
$string = iconv( "utf-8", "windows-1251", $string );
// Обрабатываем
$string = strtolower( $string );
// из windows-1251 в utf-8
$string = iconv( "windows-1251", "utf-8", $string );