|
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')); ... ?>
Пояснення до категорій змін локалі: - LC_ALL - всі функциї
- LC_COLLATE – функції порівняння стрічок
- LC_CTYPE - функції перетворення стрічок
- LC_MONETARY - функція localeconv()
- LC_NUMERIC – формат символу десяткової крапки
- LC_TIME - форматування дат функцією strftime()
|