ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

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

Строковые функции PHP. Форматирование строк PHP. Подсветка кода РНР. Преобразование кодировок PHP. Работа с URL. Работа с путями к файлам и каталогам

Форматирование строк

Преобразование регистра

  • strtolower(строка) — возвращает строку, преобразовав все символы указанной строки в нижний регистр.
  • <?php
    $a="ПРИВЕТ, ВСЕМ!";
    $a1= strtolower($a); //возвращает привет, всем!
    echo $a1 ;
    ?>
  • strtoupper(строка) — возвращает строку, преобразовав все символы строки в верхний регистр.
  • <?php
    $a="привет, всем!";
    $a1= strtoupper($a); //возвращает ПРИВЕТ, ВСЕМ!
    echo $a1 ;
    ?>
  • ucfirst(строка) — преобразует первый символ указанной строки в верхний регистр и возвращает ее.
  • <?php
    $a="привет, всем!";
    $a1= ucfirst($a); //возвращает Привет, всем!
    echo $a1 ;
    ?>
  • ucwords(строка) — преобразует первый символ каждого слова указанной строки в верхний регистр и возвращает ее.
  • <?php
    $a="привет, всем!";
    $a1= ucwords($a); //возвращает Привет, Всем!
    echo $a1 ;
    ?>

Разбивка строк на подстроки

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

  • explode(разделитель, строка[, limit]) — производит разделение строки в массив. Она возвращает массив строк, каждая из которых соответствует фрагменту исходной строки строка, находящемуся между разделителями, указанными аргументом разделитель. Необязательный параметр limit указывает максимальное количество элементов в массиве. Оставшаяся неразделенная часть будет содержаться в последнем элементе.
  • Пример:

    <?php
    $str= "Имя, Фамилия, E-mail";
    $expstr=explode(",",$str);
    print_r($expstr); /*выводит: Array ( [0] => Имя [1] => Фамилия [2] => E-mail ) */
    ?>
  • implode(параметр, значение) — является обратной функции explode() и производит объединение массива в строку. Функция возвращает строку, которая последовательно содержит все элементы массива, заданного в параметре параметр, между которыми вставляется значение, указанное в параметре значение. Для примера выведем все то, что мы только что "умассивили" функцией explode(), используя пробел в качестве разделителя.
  • Пример:

    <?php
    $a = "Из далека долго, течет река Волга, течет ...";
    $exp_a=explode(",", $a);/*выводит: Array ( [0] => Из далека долго [1] => течет река Волга [2] => течет ... )*/
    print_r($exp_a);
    $imp_a=implode(",", $exp_a);/*выводит: Из далека долго течет река Волга течет ... */
    echo "<br>". $imp_a;
    ?>
  • str_word_count(строка [, формат]) — возвращает массив слов, входящих в строку или количество слов в строке, если второй параметр не указан. Параметр формат может принимать два целочисленных значения, которые определяют вид возвращаемого массива:
  • 1– числовые индексы элементов массива соответствуют порядковому номеру слова в строке; нумерация начинается с 0;

    2 – числовые индексы элементов массива соответствуют позиции слова в строке; нумерация начинается с 0.

    Пример:

    <?php
    $str = "How do you do friend";
    echo str_word_count($str)."<br>" ; // 5
    print_r(str_word_count($str, 1)); //выводит Array ( [0] => How [1] => do [2] => you [3] => do [4] => friend )
    echo "<br>";
    print_r(str_word_count($str, 2)); //выводит Array ( [0] => How [4] => do [7] => you [11] => do [14] => friend )
    ?>
  • list(параметр1, параметр2, . . . , параметрN) — разбивает массив на переменные.
  • Пример:

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Разбивка массива на переменные</title>
    </head>

    <body>
    <?php
    $str = "Из далека долго, течет река Волга, течет ...";
    list($a1, $a2, $a3)=explode(",", $str);
    echo "$a1 <br>"; //выводит: Из далека долго
    echo "$a2 <br>"; //выводит: течет река Волга
    echo $a3; //выводит: течет ...
    ?>
    </body>
    </html>

    В окне веб-браузера это будет выглядеть ТАК.

  • strtok(строка1, строка2) — возвращает первую подстроку строки строка1, отделенную от остальной части любым из символов-разделителей, указанных в строке строка1. Если исходная строка не содержит указанных разделителей, то возвращается эта строка целиком.
  • <?php
    $a = " Из далека долго, течет % река Волга, течет ...";
    $a1= strtok($a, "%" ); // возвращает Из далека долго, течет
    echo $a1 ;
    ?>
  • str_split ( строка[, длина_строки]) — преобразует строку в массив. Если указан необязательный аргумент длина_строки, возвращаемый массив будет содержать части исходной строки длиной длина_строки каждая, иначе каждый элемент будет содержать один символ.
  • Если длина_строки меньше 1, возвращается FALSE. Если длина_строки больше длины строки строка, вся строка будет возвращена в первом и единственном элементе массива.

    Пример:

    <?php
    $str = "Из далека долго, течет река Волга, течет ...";
    $a1=str_split($str);
    $a2=str_split($str,15);
    $a3=str_split($str,30);
    print_r($a1);
    echo "<br>";
    print_r($a2);
    echo "<br>";
    print_r($a3);
    ?>

Форматирование строк PHP

Для форматирования текстовых строк, выводимых в окно браузера оператором echo, часто используется HTML и каскадные таблицы стилей. Служебные символы \n (перевод строки) и \t (табуляция) также можно использовать в строках. Если они находятся в строке, заключенной в одинарные кавычки, то при выводе этой строки оператором echo эти символы не будут работать по своему назначению и будут видны на экране. В случае двойных кавычек они, также не сработают, но отобразяться в виде пробелов. Чтобы заставить их функционировать, то строку с двойными кавычками следует начать тегом <pre>.

Пример:

<?php
$a = "<pre> Из далека долго, \n течет река Волга, течет ...";
echo $a ;
?>

В окне веб-браузера это будет выглядеть ТАК.

С целью форматирования можно применять специальные функции РНР printf() и sprintf(). Если вы используете РНР CLI, работающий в режиме командной строки, то специальные функции являются единственным средством форматирования строк. На практике часто приходится форматировать строки, содержащие не только знаки препинания, но и числа и значения переменных. При этом числа можно представлять в различных системах счисления, а в десятичной системе — в различных видах. В функциях printf() и sprintf() можно указать шаблон, в соответствии с которым будет отформатирована строка. Эти функции имеют одинаковый синтаксис, но отличаются действием и возвращаемым значением.

  • printf(формат_строка, список_ переменных) — выводит отформатированную строку и возвращает длину этой строки;
  • sprintf(формат_строка, список_ переменных) — возвращает отформатированную строку(но не выводит ее).
<?php
$a="Привет, всем!";
printf($a);//выводит Привет, всем!
sprintf($a); // ничего не выводит
echo "<br>"
$a1=sprintf($a);
printf($a1); //выводит Привет, всем!
?>

список_ переменных — имена переменных разделенныз запятой, значения которых следует подставлять в форматируемую строку. Этот параметр необязателен.

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

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

%ЗаполнительВыравниваниеДлинаТочностьТип

Рассмотрим эти необязательные элементы.

  • Заполнитель — символ, который будет использоваться для дополнения результата преобразования до заданной длины. Это может быть пробел(по умолчанию), 0 или любой другой символ, перед которым необходимо указать одинарную кавычку(').
  • Выравнивание — символ минус(-); если он указан, то выравнивание происходит по левому краю поля, выделенного для отображения значения, а в противном случае(т.е. по умолчанию) — по правому краю.
  • Длина — число, определяющее ширину поля, отводимого для вывода результата преобразования. Если результат содержит меньше символов, то оставшееся пространство будет заполнено пробелом или символом заполнения, если он был указан.
  • Точность — число, перед которым указывается точка. Определяет, сколько десятичных разрядов в дробной части числа следует отображать. Если число имеет больше таких разрядов, то результат получается округлением, а не отбрасыванием лишних знаков. Применяется для числа с плавающей точкой.
  • Тип — символ, определяющий, как трактовать тип значения переменной из списка, который подставляется в форматируемую строку. Допустимые следующие указатели типа:

% — значение переменной не используется;

b — значение трактуется как целое и выводится в виде двоичного числа;

c — значение трактуется как целое и выводится в виде символа с соответствующим кодом;

d — значение трактуется как целое и выводится в виде десятичного числа со знаком;

e — значение трактуется как число с плавающей точкой и представляется в экспотенциальной форме;

u — значение трактуется как целое и выводится в виде десятичного числа без знака;

f — значение трактуется как число с плавающей точкой и представляется в неэкспотенциальной форме(т.е. с & разделительной точкой).

o — значение трактуется как целое и выводится в виде восьмеричного числа;

s — значение трактуется как строка;

x — значение трактуется как целое и выводится в виде шестнадцатеричного числа в нижнем регистре;

X — значение трактуется как целое и выводится в виде шестнадцатеричного числа в верхнем регистре;

Рассмотрим пример.

<?php
$day = 11;
$month = 1;
$year = 2009;
printf("%02d/%02d/%04d", $day, $month, $year);
?>

В окне веб-браузера это будет выглядеть ТАК.

Еще один пример.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Форматирование строк </title>
</head>

<body>
<?php
$a=14.346;
$a1=254.6;
$a2=1246.372;
$b= "Иванов";
$b1= "Петров";
$b2= "Сидоров";
printf("<pre> <b> Платежная ведомость </b> \n");
printf("%'.-12s%'.10.2f руб.\n", $b,$a);
printf("%'.-12s%'.10.2f руб.\n", $b1,$a1);
printf("%'.-12s%'.10.2f руб.\n", $b2,$a2);
?>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

В данном примере использовался тег <pre>, который обеспечил отображение браузером строк в соответствии с их предварительным форматированием. Здесь подадобились служебные символы \n для перехода на другую строку. В качестве заполнителя была использована точка ('.). Фамилия выравнивалась по левому краю (-) поля шириной 12 символов с заполнением в виде точки ('.). Таким образом, описатель преобразования для строковых значений имеет вид: %'.-12s.

Числа представлялись с десятичной точкой и двумя разрядами после нее. Они выравнивались по правому краю поля из 10 символов, а в качестве заполнителя использовалась точка. Таким образом, описатель преобразования чисел имеет вид: %'.10.2f.

Аналогичный результат можно получить, используя функцию sprintf() для создания отформатированной строки и оператор echo для ее вывода.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Форматирование строк </title>
</head>

<body>
<?php
$a=14.346;
$a1=254.6;
$a2=1246.372;
$b= "Иванов";
$b1= "Петров";
$b2= "Сидоров";
$str="<pre> <b> Платежная ведомость </b> \n";
$str.="%'.-12s%'.10.2f руб.\n";
$str= sprintf($str,$b,$a);
$str.="%'.-12s%'.10.2f руб.\n";
$str= sprintf($str,$b1,$a1);
$str.="%'.-12s%'.10.2f руб.\n";
echo sprintf($str,$b2,$a2);
?>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Оператор .= обеспечивает склейку текущего строкового значения переменной, расположенной слева от него, с тем, которое указано справа от этого оператора. Порядок описателей в форматируемой строке соответствует порядку других параметров функций printf() и sprintf(). Для РНР версии 4.0.6 и старше можно изменять этот порядок и даже использовать один и тот же описатель несколько раз. Для этого в еаждом описателесразу же за символом % следует указать номер, обратный слэш или символ $ (далее могут следовать другие элементы). Этот номер соответствует порядковому номеру последующих аргументов функций printf() и sprintf().

Пример:

<?php
$a= "широка";
$b= " страна";
$b1=" моя родная!";
echo ucfirst(sprintf("%1\$s %2\$s %3\$s", $a, $b, $b1));
?>

В результате выполнения этого кода будет выведена строка "Широка страна моя родная!". Функция ucfirst() использовалась для того, чтобы отформатированная строка начиналась с прописной (заглавной) буквы.

Подсветка кода РНР

Во многих веб-приложениях требуется подсветить РНР-код: такая задача часто возникает при разработке форумов, посвященных вопросам РНР-программирования, при динамическом отображении РНР-скриптов на странице ресурса, в отладочных веб-приложениях и т.д. Для этого предназначена функция highlight_string().

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Подсветка кода РНР</title>
</head>

<body>
<?php
//Строка, содержащая скрипт РНР
$code='<?php
if(!$flag){
//пишем какой-либо код
echo "Hello";
$var=1;
}
else break;
?>'
;
//вызываем функцию highlight_string()
highlight_string($code);
?>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Примечание. Помимо стандартной функции highlight_string(), обесвечивающей подсветку синтаксиса кода переданной в качестве параметра строки, существует также функция highlight_file(), обеспечивающая подсветку синтаксиса файла, имя которого передается в качестве аргумента.

<?php
echo highlight_file("test/59.php")
?>

В окне веб-браузера это будет выглядеть ТАК.

Примечание. Стандартные функции highlight_string() и highlight_file() подсвечивают синтаксис только в том случае, если он заключен в теги<?phpи?>.

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

Так сложилось, что в русскоязычном секторе Интернета используется большое количество кодировок. Для преобразования строк из одной кодировки в другую предназначена функция convert_cyr_string().

convert_cyr_string(строка, кодировка1, кодировка2) — преобразует строку из одной кодировки кириллицы в другую. Она переводит строку строка из кодировки кодировка1 в кодировку кодировка2. Значения кодировка1 и кодировка2 это одиночные символы, определяющий кодировку:

    •k - koi8-r;
    •w - windows-1251;
    •i - iso8859-5;
    •a - x-cp866;
    •d - x-cp866;
    •m - x-mac-cyrillic;

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

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Преобразование кодировок</title>
</head>

<body>
<?php
$str1 = "определяющий";
$str2 = convert_cyr_string($str1,"w","k");
echo ("Результат преобразования '$str1' в кодировку koi8-r: '$str2'");
echo ("<br>");
$str3 = convert_cyr_string($str2,"k","w");
echo ("Результат возврата '$str2' в кодировку Windows-1251:'$str3'");

?>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Работа с URL

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

parse_url(строка_url) — обрабатывает URL и возвращает ассоциативный массив, включающий множество различных существующих компонентов URL: "scheme", "host", "port", "user", "pass", "path", "query" и "fragment".

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Работа с URL</title>
</head>

<body>
<?php
$url = "http://www.narod.ru/guestbook/?owner=sevidi&mainhtml=short.txt&messageshtml=sm.txt";
$arr = parse_url($url);
print_r($arr);
?>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Работа с путями к файлам и каталогам

Основной функцией при работе с путями к файлам и каталогам является функция pathinfo().

pathinfo(путь) — принимает путь к файлу путь и возвращает ассоциированный массив, хранящий в своих элементах путь, по которому расположен файл, имя файла и его расширение.

Пример:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Работа с путями к файлам и каталогам</title>
</head>

<body>
<?php
$path_s=pathinfo("D:\sevidi\index.php");
echo $path_s["dirname"]. "<br>";
echo $path_s["basename"]. "<br>";
echo $path_s["extension"]. "<br>";
?>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Для того, чтобы определить абсолютный путь к файлу необходимый для функции pathinfo(), можно воспользоваться функцией realpath().

realpath(путь) — принимает относительный путь путь и возвращает абсолютный.

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

Пример:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Работа с функцией realpath()</title>
</head>

<body>
<?php
echo realpath(".");
echo realpath("../index.php"); //выводит D:\sevidi
?>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

При разработке веб-приложений чаще требуется путь к текущей странице от Document Root, который можно узнать, к элементу суперглобального массива $_SERVER['PHP_SELF"].

Для извлечения имени файла существует отдельная функция basename().

basename(путь [, расширение_файла]) — принимает путь путь и необязательное расширение файла расширение_файла. Эта функция вернет имя файла, чей путь был передан в качестве параметра. Если имя файла имеетрасширение оно будет отброшено.

Пример:

<?php
$path="home/html/index.html";
echo basename($path). "<br>"; //выведет index.html
echo basename($path, ".html"); //выведет index
?>

Функция dirname() извлекает из пути каталог.

dirname(путь) — принимает путь путь и возвращает только каталог.

Пример:

<?php
$path="C:\www\html\index.html";
echo dirname($path); //возвращает C:\www\html
?>