Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
php учебник_весь.doc
Скачиваний:
8
Добавлен:
21.09.2019
Размер:
2.06 Mб
Скачать

Функция 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'");

?>

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

bin2hex()

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

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

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

<?

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

$str2 = bin2hex($str1);

echo($str2);

?>

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

Результат:

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

pack() 

unpack() 

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

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

pack()

Синтаксис:

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

Функция pack() упаковывает заданные в ее параметре аргументы в бинарную строку. Формат параметров и их количество задается при параметром $format, при помощи тех же спецификаторов форматирования, о которых мы говорили, только без знака %. После каждого спецификатора может стоять число, которое говорит о том, сколько информации будет обработано данным спецификатором. Для форматов aAh и 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), и все остальное до конца мы возвращаем как беззнаковое целое со старшими разрядами в конце.

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