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