Опубликован: 01.03.2005 | Доступ: свободный | Студентов: 33889 / 4520 | Оценка: 4.31 / 4.06 | Длительность: 16:41:00
ISBN: 978-5-9556-0026-0
Лекция 8:

Работа со строками

< Лекция 7 || Лекция 8: 123456 || Лекция 9 >

Еще один пример использования функции str_replace() – обработка шаблонов.

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

<h2>Введите описание статьи</h2>
<form action=sbl.php>
<table border=0>
<tr><td>Название </td><td><input 
  type=text name=title > </td></tr>
<tr><td>Краткое содержание </td><td><input 
  type=textarea name=description > </td></tr>
<tr><td>Автор </td><td><input 
  type=text name=author > </td></tr>
<tr><td>Дата публикации </td><td><input 
  type=text name=published ></td></tr>
<tr><td>Шаблон документа </td><td><textarea
  name=shablon ></textarea></td></tr>
</table>
<input type=submit value="Отправить">
</form>

Однако просто поля для ввода шаблона недостаточно. Один человек введет в него одно, другой – другое. Нужно договориться о том, как создавать шаблоны, что можно в них использовать, т.е. нужно придумать язык шаблонов. Например, мы договариваемся, что при создании шаблона можно задействовать любые html-теги, а набор спецсимволов вида <!имя_элемента> определяет значение элемента с именем имя_элемента. Далее, как обрабатывать такого рода шаблоны? Можно использовать функцию str_replace() :

<?php
$tmpl = $_GET["shablon"]; 
/* шаблон, введенный пользователем. 
Например, это может быть такая строка:
"<h1><!title></h1> <p><font 
size=-1><!description></font></p><p 
align=right><!author><br><!published></p>" */
function Show(){ 
  // функция, которая производит замену
  // элемента шаблона на его значение
global $tmpl;
foreach($_GET as $k => $v) {
   $tmpl = str_replace("<!$k>",$v,$tmpl);
}
echo $tmpl;
}
Show();
?>

Как эти файлы выглядят для обычного пользователя? Если мы введем в форму такие данные как показано на рисунке 8.1, то в результате получим:

Первая машина для переписи населения
Идея наносить данные на перфокарты и затем
считывать и обрабатывать их автоматически 
принадлежала Джону Биллингсу, а ее 
техническое решение осуществил Герман
Холлерит. Перфокарта Холлерита оказалась 
настолько удачной, что без малейших изменений
просуществовала до наших дней.
                                А. М. Федотов
                                     12.02.03
Форма для ввода описания документа "статья"    и шаблона для его отображения

Рис. 8.1. Форма для ввода описания документа "статья" и шаблона для его отображения

Функция substr_replace

Эта функция сочетает в себе свойства двух уже рассмотренных нами функций – функции str_replace() и substr() . Ее синтаксис таков:

substr_replace (исходная строка, 
    строка для замены, 
    позиция начального символа [, длина])

Эта функция заменяет часть строки строкой, предназначенной для замены. Заменяется та часть строки (т.е. подстрока), которая начинается с позиции, указанной параметром позиция начального символа. С помощью дополнительного аргумента длина можно ограничить число заменяемых символов. То есть, фактически, мы не указываем конкретно строку, которую нужно заменить, мы только описываем, где она находится и, возможно, какую длину имеет. В этом отличие функции substr_replace() от str_replace() .

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

<?php
$text = "Меня зовут Вася.";
echo "Исходная строка: $text<hr>\n";
/* Следующие две строки заменят всю 
исходную строку строкой 'А меня – Петя' */
echo substr_replace($text, 'А меня – Петя',
     0) . "<br>\n";
echo substr_replace($text, 'А меня – Петя',
     0, strlen($text)) . "<br>\n";
// Следующая строка добавит слово 'Привет! '
// в начало исходной строки
echo substr_replace($text, 'Привет! ',
     0, 0) . "<br>\n";
// Следующие две строки заменят имя Вася
// на имя Иван в исходной строке
echo substr_replace($text, 'Иван', 11,
    -1) . "<br>\n";
echo substr_replace($text, 'Иван', -5,
    -1) . "<br>\n";
?>
Пример 8.10. Использование функции substr_replace()

В результате работы этого скрипта получим:

Исходная строка: Меня зовут Вася.
------------------------------------------
А меня – Петя
А меня – Петя
Привет! Меня зовут Вася.
Меня зовут Иван.
Меня зовут Иван.
< Лекция 7 || Лекция 8: 123456 || Лекция 9 >
Дарья Федотова
Дарья Федотова
Сергей Березовский
Сергей Березовский

В рамках проф. переподготовки по программе "Программирование"

Есть курсы, которые я уже прошел. Но войдя в курс я вижу, что они не зачтены (Язык Ассемблера и архитектура ЭВМ, Программирование на С++ для профессионалов). Это как?