2012-02-02

PHP, кодировки и строковые функции


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

При использовании кодировки UTF-8 начинают сбоить и такие методы. С радостью обнаружил готовые функции, предназначенные для работы с многобайтными кодировками. Вы легко это найдете, но пусть хорошей информации будет побольше.
mb_convert_case($str, $mode [, $encoding ]);
$str - строка для обработки.
$mode может быть MB_CASE_UPPER (верхний регистр), MB_CASE_LOWER (нижний регистр) или MB_CASE_TITLE (первая буква в верхнем регистре).
$encoding может быть, например 'UTF-8'. Если не указывать, то вместо него будет использовано значение внутренней кодировки.

Есть укороченные варианты для MB_CASE_UPPER и MB_CASE_LOWER:
mb_strtolower($str [, $encoding]);
mb_strtoupper($str [, $encoding]);

P.S. Прошу не судить строго за бояны.

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