В предыдущем примере я предложил быстрое решение проблемы, при которой функции strtolower и strtoupper перестают работать с русским текстом. Это решало проблему, согласен, но настоящий программист должен уметь ПРАВИЛЬНО решать задачи. Для правильного решения задачи работы со строками в PHP, будем предварительно использовать функцию setlocale:

string setlocale ( mixed $category , string $locale [, string $… ] )

Вот как она выглядит в общем виде. setlocale явно указывает локаль, с которой будут работать функции. Параметр $category какраз и определяет, на какие функции будет распространяться установка локали, $category может быть:

  • LC_ALL - модифицировать все установки
  • LC_COLLATE - только сравнения строк, см. strcoll()
  • LC_CTYPE - классификация строк, например strtoupper()
  • LC_MONETARY - денежные значения
  • LC_NUMERIC - числовые значения
  • LC_TIME - значения даты/времени

Тоесть мы просто перед вызовами функций для работы со строками/датами/временем/денежными форматами и т.д. должны указать локаль, и дальше функции будут знать с каким текстом они работают:

setlocale(LC_ALL, ‘rus’);

Думаю такое решение задачи является более правильным и корректным.

Комментарии (13) на запись “И все-таки используем setlocale для правильного решения задачи с русским текстом”

  1. DeVoid пишет:

    Как маленькое примечание добавлю, что второй параметр функции я привел как ‘rus’ , что верно если сервер работает под управлением Windows. Если сервер работает на UNIX’овых системах - параметр может меняться (как вариант ‘ru_RU’).

  2. Игорь Алоха пишет:

    А кроме русского с какими языками можно работать?

  3. DeVoid пишет:

    Игорь, работать можно с различными языками, только нужно соответственно передавать второй параметр в функцию setlocale. Дополнительную информацию по этой функции как всегда можно найти на php.net, там же можно и найти ссылки на перечень всех языков и их обозначений.

  4. Сергей пишет:

    А можно ли прямые ссылочки?

  5. DeVoid пишет:

    http://ua.php.net/manual/ru/function.setlocale.php

  6. Sergey пишет:

    спасибо за ссылку и информацию

  7. Lev пишет:

    да похоже я решил проблему спасибо за информацию

  8. Dima пишет:

    очень памагло по чаще к вам буду заходить

  9. Max пишет:

    спасибо за ссылку весьма блогодарен

  10. abo пишет:

    Надо бы проверить :)

  11. Юлия пишет:

    Спасибо за информацию! Выношу благодарность за такие новости! Очень полезно! Буду чаще заходить к Вам!

  12. Татьяна пишет:

    Спасибо за информацию, очень своевременно:)

  13. ezoterik пишет:

    Иногда кстати этот способ не срабатывает, если у хостера не прописаны соответствующие локали. Так что если, что - “трусите” своего хостера.

Оставить комментарий