Проблемы с русским текстом, strtolower и strtoupper?
17 Март 2008
Иногда случается так, что из-за проблем с локалями в PHP функции strtolower и strtoupper перестают работать с русским текстом. Если нет времени разбираться, а нужно быстро получить результат, можно воспользоваться таким кодом:
function toupper($content)
{
$content = strtr($content, “абвгдеёжзийклмнорпстуфхцчшщъьыэюя”,
“АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯ”);
return strtoupper($content);
}function tolower($content)
{
$content = strtr($content, “АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯ”,
“абвгдеёжзийклмнорпстуфхцчшщъьыэюя”);
return strtolower($content);
}
Более подробную информацию всегда можно найти на сайте php.net. В поиске по функциям strtolower и strtoupper.

помоему там надо мультибайтовые функции для уникода использовать.. mb_strtoupper
Артём Курапов: Какое отношение имеют мультибайтовые(UTF8, UTF16…) текстовые операции к локалям?
Упс. Не вчитался, да и локали если честно не использовал никогда - переводы делаю сам, да и проблем с запятыми и точками не хочется. У меня просто были проблемы с уникодом в обычных функциях.. там правда и другие кодировки присутсвовали.
Хороший код, множно значительно упростить себе работу, имея его под рукой. Автору спасибо!
Автору спасиб
Не вчитался, да и локали если честно не использовал никогда - переводы делаю сам, да и проблем с запятыми и точками не хочется. У меня просто были проблемы с уникодом в обычных функциях.. там правда и другие кодировки присутсвовали.
интересно поможет ли мне
спасибо за мысли попробую
“… Если нет времени разбираться, а нужно быстро получить результат, можно воспользоваться …” - как раз мой случай, правда пришлось дописать украинские буквы.
только лучше вначале применить strtolower к строке, а потом уже strtr, т.е.
function tolower($content){
$content = strtolower($content);
$content = strtr($content,
“АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯ”,
“абвгдеёжзийклмнорпстуфхцчшщъьыэюя”);
return $content;
}
Может быть для многих разницы нет, но у меня strtolower(’тест’) возвращает ‘ТЕСТ’, даже если вручную локаль установить.
Все гораздо проще, установите локаль и настройте эти функции на работу с ней
setlocale(LC_CTYPE, ‘ru_RU.CP1251′);
Спасибо, выручил! Так лениво было самому набирать “АБВ…”
А вообще, очень жаль, что в 2009 году до сих пор часто возникают проблемы с русским языком.
Мда, странно. Данные форм почему-то не обрабатываются как надо. Всё в UTF-8, естественно.
Посылаю в post “проверка”, а после tolower выходит вообще ужас какой-то: “ѿрѾѲѵрѺѰ”. Странно.
Короче, это всё нихрена не работает как надо. Мы все забыли про mbstring. Конкретно вот - http://ru.php.net/manual/ru/function.mb-strtolower.php
Обратите внимание на комментарий 16-Nov-2005 05:12. Именно этот совет мне помог, всё теперь отлично. Уфф.
Тоже столкнулся с такой проблемой: в Zend Framework не корректно работает фильтр StringToLower
Нужно не только установить локаль, но и внутреннюю кодировку мультибайтовых функций по умолчанию.
setlocale( LC_ALL, ‘ru_RU.UTF-8′ );
mb_internal_encoding( ‘UTF-8′ );
После этого все работает.