1PeGaS
@1PeGaS

Почему указанная локаль для LC_CTYPE не работает?

setlocale(LC_CTYPE, 'ru_RU.UTF-8');

echo strtoupper("ггг");
echo setlocale(LC_CTYPE, 0);  - возвращает  - ru_RU.UTF-8


Да, я знаю что есть функция mb_strtoupper, которая определяет букву на основании свойств символа Юникода, и что так будет работать mb_strtoupper("ггг");
Но вопрос в другом. Почему если я установил LC_CTYPE в ru_RU.UTF-8, что должно активизировать эту локаль, для функций перевода в верхний/нижний регистры. Всё ровно функция strtoupper("ггг"); не работает?

В документации всё понятно описано:
setlocale ($category , $locale )
Параметр $category - это именованная константа, определяющая категорию функций, на которые будет влиять установка локали:
LC_CTYPE - функции преобразования и классификации строк, например strtoupper().

И я всё по логике делаю - setlocale (LC_CTYPE, 'ru_RU.UTF-8');
echo strtoupper("ггг"); - а почему тогда это не работает непонятно
  • Вопрос задан
  • 225 просмотров
Решения вопроса 1
xEpozZ
@xEpozZ
Веб-разработчик
Все же очень просто. Если вы умеете открывать и читать документацию, это уже хорошо.
Если открыть документацию strtoupper, то в первом комментарии добрый человек подсказал, что это не работает и нужно использовать mb_strtoupper(). Почему не работает? Видимо на это настройки не распространяются и многобайтовая кодировка не стыкуется с однобайтовой.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы