Главная > PHP > Проблемы с русским текстом, strtolower и strtoupper?

Проблемы с русским текстом, strtolower и strtoupper?

Иногда случается так, что из-за проблем с локалями в 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.

admin PHP , , , ,

  1. 18 Март 2008 в 00:40 | #1

    помоему там надо мультибайтовые функции для уникода использовать.. mb_strtoupper

  2. 18 Март 2008 в 01:39 | #2

    Артём Курапов: Какое отношение имеют мультибайтовые(UTF8, UTF16…) текстовые операции к локалям?

  3. 18 Март 2008 в 12:35 | #3

    Упс. Не вчитался, да и локали если честно не использовал никогда - переводы делаю сам, да и проблем с запятыми и точками не хочется. У меня просто были проблемы с уникодом в обычных функциях.. там правда и другие кодировки присутсвовали.

  4. 18 Март 2008 в 15:44 | #4

    Хороший код, множно значительно упростить себе работу, имея его под рукой. Автору спасибо!

  5. 22 Март 2008 в 05:07 | #5

    Автору спасиб

  6. 27 Март 2008 в 15:29 | #6

    Не вчитался, да и локали если честно не использовал никогда - переводы делаю сам, да и проблем с запятыми и точками не хочется. У меня просто были проблемы с уникодом в обычных функциях.. там правда и другие кодировки присутсвовали.

  7. 3 Апрель 2008 в 00:35 | #7

    интересно поможет ли мне
    спасибо за мысли попробую

  8. 4 Апрель 2008 в 20:17 | #8

    “… Если нет времени разбираться, а нужно быстро получить результат, можно воспользоваться …” - как раз мой случай, правда пришлось дописать украинские буквы.

  9. baffolobill
    14 Июль 2008 в 05:15 | #9

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

    return $content;
    }
    Может быть для многих разницы нет, но у меня strtolower(’тест’) возвращает ‘ТЕСТ’, даже если вручную локаль установить.

  10. 6 Февраль 2009 в 21:23 | #10

    Все гораздо проще, установите локаль и настройте эти функции на работу с ней

    setlocale(LC_CTYPE, ‘ru_RU.CP1251′);

  11. 9 Май 2009 в 20:31 | #11

    Спасибо, выручил! Так лениво было самому набирать “АБВ…” :)
    А вообще, очень жаль, что в 2009 году до сих пор часто возникают проблемы с русским языком.

  12. 19 Май 2009 в 19:05 | #12

    Мда, странно. Данные форм почему-то не обрабатываются как надо. Всё в UTF-8, естественно.
    Посылаю в post “проверка”, а после tolower выходит вообще ужас какой-то: “ѿрѾѲѵрѺѰ”. Странно.

  13. 19 Май 2009 в 19:59 | #13

    Короче, это всё нихрена не работает как надо. Мы все забыли про mbstring. Конкретно вот - http://ru.php.net/manual/ru/function.mb-strtolower.php
    Обратите внимание на комментарий 16-Nov-2005 05:12. Именно этот совет мне помог, всё теперь отлично. Уфф.

  14. 3 Июль 2009 в 14:31 | #14

    Тоже столкнулся с такой проблемой: в Zend Framework не корректно работает фильтр StringToLower :(

  15. 28 Июль 2009 в 09:31 | #15

    Нужно не только установить локаль, но и внутреннюю кодировку мультибайтовых функций по умолчанию.

    setlocale( LC_ALL, ‘ru_RU.UTF-8′ );
    mb_internal_encoding( ‘UTF-8′ );

    После этого все работает.

  1. 18 Март 2008 в 10:49 | #1