Главная > PHP > И все-таки используем setlocale для правильного решения задачи с русским текстом

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

В предыдущем примере я предложил быстрое решение проблемы, при которой функции 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’);

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

admin PHP ,

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

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

  2. 22 Март 2008 в 03:51 | #2

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

  3. 22 Март 2008 в 12:03 | #3

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

  4. 25 Март 2008 в 11:54 | #4

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

  5. 28 Март 2008 в 02:20 | #6

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

  6. 29 Март 2008 в 01:29 | #7

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

  7. 29 Март 2008 в 06:57 | #8

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

  8. 30 Март 2008 в 04:53 | #9

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

  9. 1 Апрель 2008 в 12:20 | #10

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

  10. 8 Апрель 2008 в 14:06 | #11

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

  11. 13 Апрель 2008 в 18:20 | #12

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

  12. 13 Апрель 2008 в 19:56 | #13

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

  1. Пока что нет уведомлений.