Поиск

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

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

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

Использовать указанные функции допустимо, если есть желание превратить вводимый пользователем адрес сайта (URL) в синтаксически правильную HTML ссылку, инкапсулировав его тэгами <А 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\">\2\3</a>";

    Здесь мы определили заменяемый текст. С помощью обратной ссылки мож но взять найденный фрагмент строки и вставить его в новую строку. Так как фрагмент http:// является необязательным, самый легкий способ обеспече ния единообразия опустить его при замене (обратите внимание, что ссылки \1 не существует) и затем всегда вставлять запись http://, чтобы все ссылки были одного формата. В новую строку сначала добавляем тэг <а 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://\2\3\" target=\"_new\">\2\3</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>