Поиск
Сопоставление с шаблоном и его замена
Несмотря на то что функции 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
- Откройте файл form.html в текстовом редакторе. Слегка изменим страни цу form.html для того, чтобы она принимала адрес URL и описание.
- Замените строку 9 (листинг 8.4), которая берет адрес электронной почты, на следующую:
- Замените строку 10с комментариями на следующую:
- Сохраните сценарий и загрузите его на сервер.
- Откройте текущую версию HandleForm.php в текстовом редакторе (лис тинг 8.3).
- Замените строку 12 таким кодом:
- Следующая строка выглядит так:
$Array["URL"] = eregi_replace($Pattern, $Replace, $Array["URL"]) ;В этой строке программы происходит замена. Мы записываем новую изме ненную строку на старое место, запрограммировав тем самым необходимое редактирование введенной строки. Теперь при отсылке URL в браузер, как в следующей строке, адрес будет появляться как активная ссылка. Эта изменен ная строка может быть также сохранена в базе данных или в файле,,и тогда ее удастся использовать в дальнейшем.print "Your submission—$Array[URL]has been received!<BR>\n");Наконец, мы завершаем условную инструкцию if. Сохраните сценарий, за грузите его на сервер (листинг 8.5) и протестируйте в браузере (рис. 8.58.7). Если сценарий работает правильно, то он берет переданный пользователем URL, проверяет его правильность и превращает в активную ссылку. Подоб ный прием вам наверняка пригодится при работе со многими Webприложе ниями.
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>
Description <TEXTAREA NAME="Array[Description]" ROWS=5 COLS=40>
•</TEXTAREAxBR>
А теперь подредактируем страницу HandleForm.php.
$Pattern = "(http://)?([Л[:зрасе:]]+)([[:alnum:]\.,_?/&=])";
Это не очень строгий шаблон, созданный для распознавания URL. Действи тельно, данный шаблон больше подходит для поиска и замены, чем для про верки правильности введенных данных, так как позволяет вставить в адрес URL некоторые потенциально опасные для вашего сайта символы.
аблон содержит три группы: http://, массив URL и замыкающую часть URL. Адрес URL может начинаться с записи http://, а может и нет. Для про верки этого пишем http, ставим двоеточие и два слеша. Вопросительный знак указывает, что раздел необязателен.
Вторая часть URL состоит из разных символов, кроме пробелов: букв, цифр, дефисов, знаков подчеркивания, точек и т.д. И наконец, в последней части имеются буквенноцифровые символы, Амперсанты и знаки равенства. Эта часть шаблона будет проверять последнюю часть URL типа .com/php/.
$Replace = "<a h r e f = \ " h t t p : / / \ \ 2 \ \ 3 \
" target=\"_new\">\2\3</a>";
Здесь мы определили заменяемый текст. С помощью обратной ссылки мож но взять найденный фрагмент строки и вставить его в новую строку. Так как фрагмент http:// является необязательным, самый легкий способ обеспече ния единообразия опустить его при замене (обратите внимание, что ссылки \1 не существует) и затем всегда вставлять запись http://, чтобы все ссылки были одного формата. В новую строку сначала добавляем тэг <а href=, затем вставляем правильный адрес URL, еще раз помещаем вторую и третью части ссылки и закрываем HTMLтэг </а>.
Листинг 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>