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

02.04.2012

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

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

  1. Использовать альтернативные функции для работы с Multibyte String. Все они начинаются с префикса mb_ : mb_strtolower, mb_substr, mb_strpos… но: для работы таких функций, на сервере требуется расширение php_mbstring
     
  2. Правильно установить "родную" кодировку:
    1
    2
    3
    4
    // устанавливаем русскую кодировку
    setlocale(LC_ALL, "ru_RU.CP1251");
    // переводим в нижний регистр
    $string = strtolower( $string ); 
  1. Можно сначала переконвертировать строку в 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 );
    
 

Категории: PHP
Яндекс.Метрика