Приветствую, хабр!
Столкнулся с проблемой корректной работы функций изменений регистра символов при работе с русским текстом в кодировке UTF-8.
Вот функция, к которой я пришел. Она работает, но, имхо, выглядит крайне некрасиво:
function reverseStringCharactersCase($string)
{
$reversedString = '';
$string = iconv('UTF-8', 'cp1251', $string);
for ($i = 0; $i < strlen($string); $i++) {
if (isUpperCase($string[$i])) {
$reversedString .= mb_strtolower($string[$i], 'cp1251');
} else {
$reversedString .= mb_strtoupper($string[$i], 'cp1251');
}
}
return iconv('cp1251', 'UTF-8', $reversedString);
}
Что я пытался сделать, но не сработало:
1. Я попробовал использовать обычные функции обработки строк, а не из мультибайт библиотеки. Эти функции на русские строки вообще не реагировали, различные варианты использования
setlocale()
ни к чему не привели (ubuntu server 10.10).
2. Я пытался использовать mb_strtoupper с вторым аргументом 'utf-8', но и этот вариант не помог.
Я хочу добиться красивого кода, без использования multibyte функций и явного преобразования кодировки средствами
iconv()
. Прогу прощения, если вопрос нубский, надеюсь на помощь аудитории данного замечательного ИТ-ресурса.
Заранее спасибо!