Сопоставление с шаблоном и его замена

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

ereg_replace("pattern", "replace", "string"};
или:
$Pattern = "pattern";
$Replace = "replace";
$String = "string";
eregi_replace($Pattern, $Replace, $String);

Использовать указанные функции допустимо, если есть желание превратить
вводимый пользователем адрес сайта (URL) в синтаксически правильную HTML
ссылку, инкапсулировав его тэгами <А target=”_blank” href=” URL” >< /А>. Сделаем это, модифици
ровав файл form.html (листинг 8.1) и сценарий HandleForm.php (листинг 8.3).

Использование шаблона с целью проверки
и последующей замены с помощью функции eregi_replace

  1. Откройте файл form.html в текстовом редакторе. Слегка изменим страни
    цу form.html для того, чтобы она принимала адрес URL и описание.
  2. Замените строку 9 (листинг 8.4), которая берет адрес электронной почты,
    на следующую:

  3. URL <INPUT TYPE=TEXT NAME="Array[URL]" SIZE=60xBR>

    Листинг 8.4 т Страница form.html, слегка модифицированная для ввода
    URL, описания вместо адреса электронной почты и комментария.


    1 <HTML>
    2 <HEAD>
    3 <TITLE>HTML Form</TITLE>
    4 </HEAD>
    5 <BODY>
    6 <FORM ACTION="HandleForm.php" METHOD=POST>
    7 "First Name <INPUT TYPE=TEXT NAME="Array [FirstName] " SIZE,=20xBR>
    8 Last Name <INPUT. TYPE=TEXT NAME="Array[LastName]" SIZE=40xBR>
    9 TOL <INPTJT TYPE=TEXT NAME= "Array [URL] " SIZE=60xBR>
    10 Description <TEXTAREA NAME="Array[Description]" ROWS=5 COLS=40></
    TEXTAREAxBR>
    11 <INPUT TYPE=SUBMIT NAME="SUBMIT" VALUE="Submit!">
    12 </FORM>
    13 </BODY>

  4. Замените строку 10с комментариями на следующую:

  5. Description <TEXTAREA NAME="Array[Description]" ROWS=5 COLS=40>
    •</TEXTAREAxBR>

  6. Сохраните сценарий и загрузите его на сервер.
  7. А теперь подредактируем страницу HandleForm.php.

  8. Откройте текущую версию HandleForm.php в текстовом редакторе (лис
    тинг 8.3).
  9. Замените строку 12 таким кодом:
  10. $Pattern = "(http://)?([Л[:зрасе:]]+)([[:alnum:].,_?/&=])";

    Это не очень строгий шаблон, созданный для распознавания URL. Действи
    тельно, данный шаблон больше подходит для поиска и замены, чем для про
    верки правильности введенных данных, так как позволяет вставить в адрес
    URL некоторые потенциально опасные для вашего сайта символы.

    аблон содержит три группы: http://, массив URL и замыкающую часть
    URL. Адрес URL может начинаться с записи http://, а может и нет. Для про
    верки этого пишем http, ставим двоеточие и два слеша. Вопросительный знак
    указывает, что раздел необязателен.

    Вторая часть URL состоит из разных символов, кроме пробелов: букв,
    цифр, дефисов, знаков подчеркивания, точек и т.д. И наконец, в последней
    части имеются буквенноцифровые символы, Амперсанты и знаки равенства.
    Эта часть шаблона будет проверять последнюю часть URL типа .com/php/.

  11. Следующая строка выглядит так:
  12. $Replace = "<a h r e f = " h t t p : / / 2 3
    " target="_new">23</a>";

    Здесь мы определили заменяемый текст. С помощью обратной ссылки мож
    но взять найденный фрагмент строки и вставить его в новую строку. Так как
    фрагмент http:// является необязательным, самый легкий способ обеспече
    ния единообразия опустить его при замене (обратите внимание, что ссылки
    1 не существует) и затем всегда вставлять запись http://, чтобы все ссылки
    были одного формата. В новую строку сначала добавляем тэг <а target=”_blank” href=, затем
    вставляем правильный адрес URL, еще раз помещаем вторую и третью части
    ссылки и закрываем HTMLтэг </а>.

  13. $Array["URL"] = eregi_replace($Pattern, $Replace, $Array["URL"]) ;
    В этой строке программы происходит замена. Мы записываем новую изме
    ненную строку на старое место, запрограммировав тем самым необходимое
    редактирование введенной строки. Теперь при отсылке URL в браузер, как
    в следующей строке, адрес будет появляться как активная ссылка. Эта изменен
    ная строка может быть также сохранена в базе данных или в файле,,и тогда ее
    удастся использовать в дальнейшем.
  14. print "Your submission—$Array[URL]has been received!<BR>n");
    Наконец, мы завершаем условную инструкцию if. Сохраните сценарий, за
    грузите его на сервер (листинг 8.5) и протестируйте в браузере (рис. 8.58.7).
    Если сценарий работает правильно, то он берет переданный пользователем
    URL, проверяет его правильность и превращает в активную ссылку. Подоб
    ный прием вам наверняка пригодится при работе со многими Webприложе
    ниями.

Листинг 8.5 т Функция eregi_replace ( ) автоматически превратит передан
ный пользователем адрес URL JB активную ссылку. Это возможно благодаря
использованию обратных ссылок.


1 <HTML>
2 <HEAD>
3 <TITLE>Using Regular Expressions</TITLE'x/HEAD>
4 <BODY>
5 <?php
6 /* Эта страница получает и обрабатывает данные, принятые
от "form.html". */
7 if (($Array["FirstName"]) AND ($Array["LastName"])) {
8 $Array["Name"]'= $Array["FirstName"] . " " .
$Array["LastName"];
9 } else {
10 print ("Please enter your first and last names.<BR>n");
11 }
12 $Pattern = "(http://)?([A[:space:]]+)([[:alnum:].,_?/£=])";
13 $Replace = "<a bref="http://23" target="_new">23</a>";
14 $Array["URL"] = eregi_replace($Pattern, $Replace, $ Array ["URL"]) ,•
15 print ("Your submission$Array[URL]has been received!<BR>n" );
16 ?>
17 </BODY>
18 </HTML>

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: