Что делает set_locale (LC_CTYPE, 'C');на самом деле делать? - PullRequest
10 голосов
/ 08 марта 2011

Когда мой PHP-скрипт выполняется с кодировкой UTF-8 с использованием символов, отличных от ascii, некоторые функции PHP, такие как strtolower(), не работают. Я мог бы использовать mb_strtolower, но этот скрипт можно запускать на всевозможных платформах и конфигурациях, а расширение многобайтовой строки может быть недоступно. Я мог бы проверить, существует ли функция перед использованием, но у меня есть строковые функции, замусоренные по всему коду, и я бы не стал заменять каждый экземпляр.

Кто-то предложил использовать set_locale(LC_CTYPE, 'C'), что, по его словам, заставляет строковые функции работать правильно. Это звучит хорошо, но я не хочу вводить это изменение, не понимая точно, что оно делает. Я использовал set_locale для изменения форматирования чисел прежде, но я не использовал флаг LC_CTYPE раньше, и я не очень понимаю, что он делает. Что означает значение 'C'? Спасибо!

1 Ответ

10 голосов
/ 08 марта 2011

C означает «использовать любую локаль, закодированную жестко» (и поскольку большинство * NIX-программ написаны на C, это называется C). Однако обычно это не локаль UTF8.

Если вы используете многобайтовые кодировки, такие как UTF8, вы не можете использовать обычные строковые функции - требуется использование mb_ аналогов Однако почти в каждой установке PHP должно быть включено это расширение.

...