РНР 5 в подлиннике

Страница 160 из 554


Глава 15. Строковые функции

325

По правде говоря, локаль — вещь довольно непредсказуемая и, как мы уже говорили, достаточно плохо переносимая между операционными системами. Так что, если ваш сценарий не очень велик, задумайтесь: возможно, лучше будет искать обходной путь (например, использовать strtr о), а не рассчитывать на локаль.

Имейте в виду, что по умолчанию РНР не использует вообще никакую локаль, даже если в системе она установлена. Для того чтобы активировать локаль по умолчанию и тем самым заставить функции strtouppero, strftimef) и т. д. работать правильно, необходимо выполнить в начале скрипта следующую команду:

setlocale(lc_all, ' ') ;

Как видите, мы не указываем имя локали, и в этом случае РНР сам выбирает ту, что установлена в системе по умолчанию (напоминаем, что в Unix ее имя хранится в переменной окружения lang). Конечно, если вы знаете имя, то можете его здесь указать.

шмшшшшт

Еще раз обратите внимание, что вызывать setlocale О нужно обязательно, даже если имя локали неизвестно. В последнем случае есть шанс, что РНР сможет установить правильную локаль самостоятельно.

Преобразование кодировок

Иногда бывает необходимо преобразовать строку из одной кодировки кириллицы в другую. Например, мы в программе сменили локаль: была кодировка Windows-1251, а стала — K018-R. Но строки-то остались по-прежнему в кодировке Windows-1251, а значит, для правильной работы с ними нам нужно их перекодировать в KOI8-R. Для этого и служит функция преобразования кодировок.

string convert_cyr_string(string $str, char $frcm, char $to) ;

Функция переводит строку $str из кодировки $from в кодировку $to. Конечно, это имеет смысл только для строк, содержащих "русские" буквы, т. к. латиница во всех кодировках выглядит одинаково. Разумеется, кодировка $from должна совпадать с истинной кодировкой строки, иначе результат получится неверным. Значения $from и $to — один символ, определяющий кодировку:

□ k - KOI8-R;

□ w - Windows-1251;

□ i - IS08859-5;

□ а - Х-СР866;

□ d - Х-СР866;

□ m - X-MAC-Cyrillic.

Функция работает достаточно быстро, так что ее вполне можно применять, скажем, для перекодировки писем в нужную форму перед их отправкой по электронной почте.

326

Часть IV. Стандартные функции РНР

Функции форматных преобразований

Как мы знаем, переменные в строках РНР интерполируются, поэтому практически всегда задача "смешивания" текста со значениями переменных не является проблемой. Например, мы можем спокойно написать что-то вроде:

echo "Привет, Sname! Вам Sage лет.";

Вспомним, что в языке С нам приходилось для аналогичных целей писать следующий код:

printf("Привет, %s! Вам %s лет", name, age);

Язык РНР также поддерживает ряд функций, использующих такой же синтаксис, как и их С-эквиваленты. Бывают случаи, когда их применение дает наиболее красивое и лаконичное решение, хотя это и случается довольно редко.

string sprintf(string $format [, mixed args, ...])

Эта функция — аналог функции sprintf о в языке С. Она возвращает строку, составленную на основе строки форматирования, содержащей некоторые специальные символы, которые будут впоследствии заменены на значения соответствующих переменных из списка аргументов.

Строка форматирования $ format может включать в себя команды форматирования, предваренные символом %. Все остальные символы копируются в выходную строку как есть. Каждый спецификатор формата (т. е. символ i и следующие за ним команды) соответствует одному, и только одному параметру, указанному после параметра $ format. Если же нужно поместить в текст % как обычный символ, необходимо его удвоить:

echo sprintf("The percentage was %d%%", Spercentage);

Каждый спецификатор формата включает максимум пять элементов, записанных слитно (в порядке их следования после символа %):

% Заполнитель [-] Размер .Точность Тип

□ Необязательный заполнитель — символ заполнения, который будет использован, если выводимая величина занимает меньше знакомест, чем имеет отведенное для нее поле. В качестве символов-заполнителей может использоваться пробел или О, по умолчанию подставляется пробел. Можно задать любой другой знак, если указать его в строке форматирования, предварив апострофом (')•

□ Необязательный спецификатор выравнивания, определяющий, будет результат выровнен по правому или по левому краю поля. По умолчанию производится выравнивание по правому краю, однако можно указать и левое выравнивание, задав символ - (минус).

□ Необязательное число, определяющее размер поля для вывода величины. Если результат не будет в поле помещаться, то он "вылезет" за края этого поля, но без усечения.

□ Необязательное число, предваренное точкой ("."), предписывающее точность, — количество знаков после запятой в результирующей строке. Этот спецификатор




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006