Головна PHP PHP: Вирішення проблеми з strtolower() і strtoupper()
PHP: Вирішення проблеми з strtolower() і strtoupper()

Напевно кожен php-програміст зустрічався з проблемою зміни регістру символів за допомогою функцій strtolower() і strtoupper() у випадку використання кирилиці, якщо сайт розміщений на UNIX сервері.

Суть проблеми полягає в використанні по замовчуванні невірної локалі. Тобто усі символи латиниці нормально перетворюються функціями strtolower() і strtoupper().

Переглянути доступні локалі на сервері можна за допомогою функції system('locale -a').

На стандартному сервері доступні наступні локалі (для української і російської мови):

 

  • ru_RU.CP1251
  • ru_RU.CP866
  • ru_RU.ISO8859-5
  • ru_RU.KOI8-R
  • ru_RU.UTF-8
  • uk_UA.ISO8859-5
  • uk_UA.KOI8-U
  • uk_UA.UTF-8
Вибравши необхідну локаль змінюємо налаштування сервера щодо поведінки нашого скрипта командою setlocale(mixed category, array locale).

Приклад:

<?php
...

//для української мови, кодування KOI8-U
setlocale (LC_CTYPE, "uk_UA.KOI8-U");

//для української мови, кодування UTF-8
setlocale (LC_CTYPE, "uk_UA.UTF-8");

//універсальний для російської мови
setlocale (LC_CTYPE, array ('ru_RU.CP1251', 'rus_RUS.1251'));
...
?>

Пояснення до категорій змін локалі:
  1. LC_ALL - всі функциї
  2. LC_COLLATE – функції порівняння стрічок
  3. LC_CTYPE - функції перетворення стрічок
  4. LC_MONETARY - функція localeconv()
  5. LC_NUMERIC – формат символу десяткової крапки
  6. LC_TIME - форматування дат функцією strftime()
 

Додати коментар


Захисний код
Оновити

© 2008-2013 PHPist