Почему не работает функция strtolower() на php
02.04.2012
Иногда, при работе с текстов в PHP, приходится сталкиваться с «неверной» работой ряда функций:
strtolower и strtoupper – текст не меняет свой регистр.
substr – «промахивается при обрезании в два раза».
strpos и т.д. – возвращают неверный результат.
Все эти проблемы связаны с кодировкой текста!
Обычно из-за того, что функции применяются к строкам в UTF-8, а не в windows-1251 (CP1251).
Варианты решения:
- Использовать альтернативные функции для работы с Multibyte String. Все они начинаются с префикса mb_ : mb_strtolower, mb_substr, mb_strpos… но: для работы таких функций, на сервере требуется расширение php_mbstring
  - Правильно установить "родную" кодировку:
1
2
3
4// устанавливаем русскую кодировку setlocale(LC_ALL, "ru_RU.CP1251"); // переводим в нижний регистр $string = strtolower( $string );
- Можно сначала переконвертировать строку в windows-1251, проделать нужные операции, а затем результат перевести в UTF-8
1
2
3
4
5
6
7// из 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 );