Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PHP программы.doc
Скачиваний:
2
Добавлен:
06.08.2019
Размер:
266.75 Кб
Скачать

Int printf(string format [, mixed args])

string sprintf(string format [, mixed args])

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

С одной стороны этими функциями можно пользоваться просто как функциями вывода:

<?

printf("Hello!"); // выводит "Hello!"

sprintf("Hello!"); // сама по себе ничего не выводит,

$str = sprintf("Hello!"); // а просто возвращает строку,

printf($str); // которую затем можно вывести в выходной поток

?>

Но использовать их только так, как мы сейчас продемонстрировали – простое расточительство, так как эти функции способны на большее. Дело в том, что аргумент format этих функций представляет собой строку, содержащую специальные символы, использующиеся при форматировании данных, содержащихся в списке аргументов. Эти спецсимволы называются спецификаторами преобразования, а символы, которые остаются неизменными при форматировании строки, называют директивами.

Спецификация определяется символом "%", за которым может следовать до пяти спецификаторов в следующем порядке:

Спецификатор заполнения

Устанавливает символ, которым строка заполняется до заданного размера. По умолчанию используется пробел. Спецификатор заполнения действует только при наличии спецификатора минимальной ширины

Спецификатор выравнивания

По умолчанию дополнение строки до минимальной ширины производится с левого края (т.е., строка выравнивается по правому краю). Если добавлен символ дефиса, то строка выравнивается по левому краю

Спецификатор минимальной ширины

Представляет собой целое число, задающее минимальный размер форматированной строки. Если переданная строка меньше, то она дополняется символами, указанными в спецификаторе заполнения

Спецификатор точности

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

спецификатор типа

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

b – целое число, представляемое в двоичном виде;

с – целое число, представляемое в виде символа с тем же ASCII кодом;

d – целое число, представляемое в десятичном виде;

f – число с плавающей точкой, представляемое в виде десятичной дроби;

o – целое число, представляемое в восьмеричном виде;

s – строка;

x – целое число, представляемое в шестнадцатеричном виде в нижнем регистре;

X – целое число, представляемое в шестнадцатеричном виде в верхнем регистре

Теперь, после разговора о спецификаторах типа, выведем с помощью функции printf() строку в формате даты dd/mm/yyyy. Следующий код выводит в результате строку "02/03/2003":

<?

$day = 2;

$month = 3;

$year = 2003;

printf("%02d/%02d/%04d", $day, $month, $year);

?>

Результат:

02/03/2003

В этом примере, месяц и день мы форматируем как двузначные числа, а год – как четырехзначное. При этом мы указываем, что целые числа дополняются до минимальной длины нулями слева: %04d

Первый символ – спецификатор заполнения и он равен нулю. Так как дополнение дописывается к началу числа, спецификатор выравнивания отсутствует. Спецификатор минимальной ширины равен двум. Спецификатор точности также отсутствует, так как мы форматируем целое число. Спецификатор типа представлен символом d, так как мы форматируем число как десятичное целое.

Приведем еще один пример.

<?

$value = 19;

printf("%.3f", $value);

?>

Этот скрипт выводит число 19 в виде 19.000

Еще одна форматная функция

функция sscanf()

Синтаксис:

mixed sscanf(string str, string format [, string var1 ...])

Эта функция является полной противоположностью функции printf(). Она интерпретирует строку str согласно формату format, аналогично спецификации printf(). При указании только двух аргументов полученные значения возвращаются как массив.

Давайте рассмотрим такой пример. Пусть у нас есть строка, в которой находится информация о названии и серийном номере изделия в виде "maxtor/203-5505" и нам надо вытащить из нее серийный номер. Пишем вот такой скриптик:

<?

$product = "maxtor/203-5505";

$str = sscanf($product,"maxtor/%3d-%4d");

echo ("$str[0]-$str[1]");

?>

Результат:

203-5505

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

Давайте поработаем еще с датой изготовления этого изделия, которая нам явилась в виде "august 10 2003", а нам надо чтоб она выводилась в виде " 10 aug 2003". Работаем.

<?

$date = "august 10 2003";

list($month, $day, $year) = sscanf($date, "%s %d %d");

echo("Date: $day-".substr($month,0,3)."-$year");

?>

Результат:

Date: 10-aug-2003

Важное замечание: при указании необязательных параметров их надо передавать по ссылке (ссылка обозначается указанием символа "&" перед переменной).

Пример, в котором используются дополнительные необязательные параметры:

<?

$book = "1\tThinking in PHP";

$str = sscanf($book,"%d\t%s %s %s", &$id, &$first, &$second, &$last);

echo ("book number $id - $first $second $last");

?>

Результат:

book number 1 - Thinking in PHP>

Функции преобразования кодировки

convert_cyr_string()

bin2hex()

convert_cyr_string()

Синтаксис:

string convert_cyr_string(string str, string from, string to)

Функция преобразует строку из одной кодировки кириллицы в другую. Она переводит строку str из кодировки from в кодировку to. Значения from и to это одиночные символы, определяющий кодировку:

k - koi8-r;

w - windows-1251;

i - iso8859-5;

a - x-cp866;

d - x-cp866;

m - x-mac-cyrillic;

Давайте для примера перекодируем слово "определяющий" из кодировки windows-1251 в koi8-r и обратно:

<?

$str1 = "определяющий";

$str2 = convert_cyr_string($str1,"w","k");

echo ("result of translate '$str1' to koi8-r is '$str2'");

echo ("<br>");

$str3 = convert_cyr_string($str2,"k","w");

echo ("result of translate '$str2' to win is '$str3'");

?>

И вот результат:

result of translate 'определяющий' to koi8-r is 'ПРТЕДЕМСАЭЙК'

result of translate 'ПРТЕДЕМСАЭЙК' to win is 'определяющий'

bin2hex()

Производит побайтовое преобразование символьных данных в шестнадцатеричный вид.

Функция bin2hex() принимает в качестве единственного параметра строку и возвращает строковое шестнадцатеричное представление символов, содержащихся в этой строке.

Для примера давайте перекодируем тоже самое слово "определяющий":

<?

$str1 = "определяющий";

$str2 = bin2hex($str1);

echo($str2);

?>

И вот какая абракадабра из этого получилась:

Результат:

cfd0d2c5c4c5ccd1c0ddc9ca

Функции работы с бинарными данными

pack()

unpack()

Собственно, таких функций две – pack() и unpack(). Первая осуществляет пакетирование данных в двоичную строку, а вторая – распаковывает данные из двоичной строки. Лично у меня пока не было необходимости пользоваться этими функциями, кроме как при подготовке примеров их использования для этой главы. Но кто знает, может быть кому-то они очень нужны, поэтому мы с ними чуть-чуть повозимся.

Итак, функция:

pack()

Синтаксис:

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

Функция pack() упаковывает заданные в ее параметре аргументы в бинарную строку. Формат параметров и их количество задается при параметром $format, при помощи тех же спецификаторов форматирования, о которых мы говорили, только без знака %. После каждого спецификатора может стоять число, которое говорит о том, сколько информации будет обработано данным спецификатором. Для форматов a, A, h и H это число задает количество символов, которые будут помещены в бинарную строку из тех, что находятся параметре-строке при вызове функции (то есть, фактически определяется размер поля вывода строки). Если мы используем спецификатор "@", то мы определяем абсолютную позицию, в которую будут помещены данные. Для всех остальных спецификаторов следующие за ними числа задают количество аргументов, на которые распространяется действие данного формата. Вместо числа можно указать *, в этом случае спецификатор действует на все оставшиеся данные. Заметим, что функция возвращает упакованные данные в шестнадцатеричном формате.

Список спецификаторов формата:

a - строка, свободные места в поле заполняются символом с кодом 0;

A - строка, свободные места заполняются пробелами;

h - шестнадцатеричная строка, младшие разряды в начале;

H - шестнадцатеричная строка, старшие разряды в начале;

c - знаковый байт (символ);

C - беззнаковый байт;

s - знаковое короткое целое;

S - беззнаковое короткое число;

n - беззнаковое целое (16 битов, старшие разряды в конце);

v - беззнаковое целое (16 битов, младшие разряды в конце);

i - знаковое целое (размер и порядок байтов определяется архитектурой);

I - беззнаковое целое;

l - знаковое длинное целое (32 бита, порядок знаков определяется архитектурой);

L - беззнаковое длинное целое;

N - беззнаковое длинное целое (32 бита, старшие разряды в конце);

V - беззнаковое целое (32 бита, младшие разряды в конце);

f - число с плавающей точкой;

d - число двойной точности;

x - символ с нулевым кодом;

X - возврат назад на 1 байт;

@ - заполнение нулевым кодом до заданной абсолютной позиции.

Функция

unpack()

Как уже говорилось выше, Распаковывает данные из двоичной строки согласно формату. Функция возвращает массив, содержащий распакованные элементы.

Синтаксис:

array unpack(string $format, string $data)

Давайте попробуем что-нибудь запаковать. К примеру, так.

<?

$bin = pack("nvn*",0x5722,0x1148, 65, 66); // запаковываем, согласно формату

$var = bin2hex($bin); // перекодируем из шестнадцатеричного формата

echo($var);

?>

Итак, что мы увидели: функция вернула 6 байтов, причем в такой последовательности:

0х57, 0х22, 0х48, 0х11, 0х00, 0х41, 0х00, 0х42. Понятно, почему так. Согласно заданному нами формату (nvn*), первое число мы возвращаем как беззнаковое целое со старшими разрядами в конце, второе тоже как беззнаковое целое, только в конце – младшие разряды (поэтому нам вернулось 0х48, 0х11, а не 0х11, 0х48), и все остальное до конца мы возвращаем как беззнаковое целое со старшими разрядами в конце.

Функции работы с блоками текста

wordwrap()

str_replace()

substr_replace()

strtr()

stripslashes()

stripcslashes()

addslashes()

addcslashes()

quotemeta()

strrev()

wordwrap()

Синтаксис:

string wordwrap(string str [, int width [, string break [, int cut]]])

Функция wordwrap() разбивает исходный текст на строки с определенными завершающими символами. Согласно синтаксису, эта функция разбивает блок текста str на несколько строк, которые завершаеются символами break, так, чтобы в одной строке было не более width букв. Поскольку разбиение происходит по границам слов, текст остается вполне читаемым.

К примеру:

<?

$str = "Вставай, страна огромная";

$mod_str = wordwrap($str,5,"\t");

echo($mod_str);

?>

str_replace()

Синтаксис:

string str_replace(string from, string to, string str)

Функция str_replace() заменяет в исходной строке str одни подстроки на другие. Т.е. функция заменяет в строке str все вхождения подстроки from на to и возвращает результат. Эта функция может работать с двоичными строками.

Функция, вообще говоря, нужная. К примеру, если Вы пишите что-то типа гостевой книги, форума, и хотите, чтобы в форме ввода для выделения теста можно было пользоваться стандарными тегами HTML, Вы можете с помощью этой функции заменить символы, которые Вы выбрали для форматирования на стандартные теги НТML. К примеру:

$txt = str_replace("[B]","<B>",$txt);

Т.е. если Вы используете для отображения текста полужирным шрифтом символы "[B]", Вы должны их заменить на символ "<B>", используемые в НТМL.

Позже, при написании реального проекта, мы обязательно будем использовать как эту, так и многие другие, рассмотренные нами функции.

substr_replace()

Синтаксис:

string substr_replace(string str, string replacement, int start [, int length])

Эта функция заменяет в исходной строке одни подстроки на другие. Она возвращает строку str, в которой часть от символа с позицией start и длиной length заменяется строкой replacement. Если аргумент длины length не указан, замена проводится до конца.

Если значение аргумента start положительно, то отсчет производится от начала строки str, в противном случае - от конца. В случае неотрицательного значения length, оно указывает длину заменяемого фрагмента. Если же оно отрицательно, то это - число символов от конца строки str до последнего символа заменяемого фрагмента.

strtr()

Синтаксис:

string strtr(string str, string from, string to)

string strtr(string str, array from)

Эта функция предназначена для комплексной замены в строке и имеет два вида синтаксиса. В первом случае функция strtr() возвращает строку str, в которой каждый символ, присутствующий в строке from, заменяется на символ из строки to. Если строки from и to различной длины, то лишние конечные символы у той строки, которая длинее, игнорируются. Во втором случае функция strtr() возвращает строку, в которой фрагменты строки str заменяются на фрагменты, соответствующие индексам значений элементов массива from. Сначала функция пытается заменить наибольшие фрагменты исходной строки, при этом не выполняя замену в уже модифицированных частях строки. Таким образом, можно выполнить несколько замен сразу:

<?

$str = array("" => "M.Kuznetsov",

"<name2>" => "I.Simdyanov");

$str_out = "Авторы этого учебника и приветствуют вас!";

echo strtr($str_out,$str);

?>

А вот как можно при помощи этой функции отменить действие функции htmlspecialchars():

<?

$var = array_flip(get_html_translation_table());

$str = strtr($str, $var);

?>

Т.е., из строки, в которой все спецсимволы заменены на их HTML-эквиваленты, мы получаме исходную строку.

stripslashes()

Синтаксис:

string stripslashes(string str)

Функция удаления обратных слешей. Т.е. производится замена в строке str предваренных слешем символов на их кодовые эквиваленты. Функция работает с символами: ", ", \.

stripcslashes()

Синтаксис:

string stripcslashes(string str)

А эта функция преобразует спецсимволы в их двоичное представление.

Она возвращает строку, в которой закомментированные обратным слешем спецсимволы, (с целью визуального отображения), преобразуются в их двоичное представление. Функция распознает C-подобные записи (восьмеричные и шестнадцатеричные последовательности \n, \r и т.д.).

addslashes()

Синтаксис:

string addslashes(string str)

Функция добавления слешей перед символами строки "," и \. Эту функцию удобно использовать при вызове функции eval().

addcslashes()

Синтаксис:

string addcslashes(string str, string charlist)

Функция добавление слешей перед специальными символами строки.

Возвращает строку str, в которую вставлены символы обратного слеша перед перечисленными в списке charlist символами. Это позволяет преобразовывать символы, которые не печатаются в их визуальное С-представление.

quotemeta()

Синтаксис:

string quotemeta(string str)

Функция цитирования метасимволов. Возвращает строку, в которую добавлены обратные слеши перед каждым из следующих символов: . \\ + * ? [ ^ ] ( $ ). Функцию можно использовать для подготовки шаблонов в регулярных выражениях.

strrev()

Синтаксис:

string strrev(string str)

Функция производит реверс строки.

Функции объединения/разделения строк

str_repeat()

str_pad()

chunk_split()

strtok()

explode()

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]