|
нижний регистр. Возвращает результат перевода.
Надо заметить, что при неправильной настройке локали (про локаль будет
рассказано
чуть позже, а пока скажу только, что это набор правил по переводу символов из
одно-
го регистра в другой, переводу даты и времени, денежных единиц и т. д.) функция
будет выдавать, мягко говоря, странные результаты при работе с буквами
кириллицы.
Возможно, в несложных программах, а также если нет уверенности в поддержке со-
ответствующей локали операционной системой, проще будет воспользоваться "руч-
ным" преобразованием символов, задействуя функцию strtr():
$st=strtr($st,
"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩљЫЬЭЮЯ", "абвгдеёжзийклмнопрстуфхцчшщъыьэ-
юя");
Главное достоинство данного способа — то, что в случае проблем с кодировкой для
восстановления работоспособности сценария вам придется всего лишь преобразовать
его в ту же кодировку, в которой у вас хранятся документы на сервере.
string strtoupper(string $str)
Глава 12. Строковые функции 217
Переводит строку в верхний регистр. Возвращает результат преобразования. Эта
функции также прекрасно работает со строками, составленными из "английских"
букв, но с "русскими" буквами может возникнуть все та же проблема.
Установка локали (локальных настроек)
string SetLocale(string $category, string $locale)
Функция устанавливает текущую локаль, с которой будут работать функции преобра-
зования регистра символов, вывода даты-времени и т. д. Вообще говоря, для
каждой
категории функций локаль определяется отдельно и выглядит по-разному. То, какую
именно категорию функций затронет вызов SetLocale(), задается в параметре
$category. Он может принимать следующие строковые значения:
r LC_CTYPE — активизирует указанную локаль для функций перевода в верх-
ний/нижний регистры;
r LC_NUMERIC — активизирует локаль для функций форматирования дробных чи-
сел — а именно, задает разделитель целой и дробной части в числах;
r LC_TIME — задает формат вывода даты и времени по умолчанию;
r LC_ALL — устанавливает все вышеперечисленные режимы.
Теперь поговорим о параметре $locale. Как известно, каждая локаль,
установленная
в системе, имеет свое уникальное имя, по которому к ней можно обратиться.
Именно
оно и фиксируется в этом параметре. Однако, есть два важных исключения из этого
правила. Во-первых, если величина $locale равна пустой строке "", то
устанавлива-
ется та локаль, которая указана в глобальной переменной окружения с именем,
сов-
падающим с именем категории $category (или LANG — она практически всегда
присутствует в Unix). Во-вторых, если в этом параметре передается 0, то новая
ло-
каль не устанавливается, а просто возвращается имя текущей локали для
указанного
режима.
К сожалению, имена локалей задаются при настройке операционной системы, и для
них, по-видимому, не существует стандартов. Выясните у своего
хостинг-провайдера,
как называются локали для разных кодировок русских символов. Но, если следую-
щий фрагмент работает у вашего хостинг-провайдера, это не означает, что он
зарабо-
тает, например, под Windows:
setlocale('LC_CTYPE','ru_SU.KOI8-R');
Здесь вызов устанавливает таблицу замены регистра букв в соответствии с
кодиров-
кой KOI8-R.
По правде говоря, локаль — вещь довольно непредсказуемая и, как я уже говорил,
довольно плохо переносимая между операционными системами. Так что, если ваш
сценарий не очень велик, задумайтесь: возможно, лучше будет искать обходной
путь
(например, использовать strtr()), а не рассчитывать на локаль.
Часть IV. Стандартные функции PHP 218
Преобразование кодировок
Часто встречается ситуация, когда нам требуется преобразовать строку из одной
ко-
дировки кириллицы в другую. Например, мы в программе сменили локаль: была ко-
дировка windows, а стала — KOI8-R. Но строки-то остались по-прежнему в
кодировке
WIN-1251, а значит, для правильной работы с ними нам нужно их перекодировать в
KOI8-R. Для этого и служит функция преобразования кодировок.
string convert_cyr_string(string $str, char $from, char $to);
Функция переводит строку $str из кодировки $from в кодировку $to. К
|
|