Автор Тема: Как проверить URL-адрес в форме на отсутствие ошибок?  (Прочитано 4693 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Салажонок

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Причем, если в поле "URL" не введено ничего, то и проверять ничего не нужно.

Салажонок

Оффлайн Салажонок

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Кто может подправить?
« Ответ #1 : 06 Марта 2002, 16:41:31 »
В принципе работает, но происходит проверка только на наличие точки и правильность ситаксиса http|https|ftp|gopher|telnet, а хотелось бы и на наличие http:// и т.д.

*********** config.php *****************

[skipped]

---------------------------------------------------------

/* Return a valid url with http:// */
Function validateURL ($url) {
   /* Normal URLs, at least one dot in hostname */
   if (ereg("^(http|https|ftp|gopher|telnet)(://)([[:alnum:]._-]+)((\\.[[:alnum:]._-]+)+)((:[[:digit:]]+)?)((/[^[:space:]]*)?)$",$url,$regs)) {
     $url = $regs[1] . $regs[2] . $regs[3] . $regs[4] . $regs[6] . $regs[8];
     $protocol = $regs[1];
     $hostname = $regs[3] . $regs[4];
     $portnum = substr($regs[6],1,10); /* skip ":" */
     $path = $regs[8];
      return($url);
   /* Hostnames like (http://www.ftp).blah.blah, with optional port and path */
   } elseif (ereg("^(www|ftp)((\\.[[:alnum:]._-]+)+)((:[[:digit:]]+)?)((/[^[:space:]]*)?)$",$url,$regs)) {
     if ($regs[1] == "ftp") {
         $proto = "ftp://";
      } else {
         $proto = "http://";
      }
     $url = $proto . $regs[1] . $regs[2] . $regs[4] . $regs[6];
     $hostname = $regs[1] . $regs[2];
     $port = substr($regs[4],1,10); /* skip ":" */
     $path = $regs[6];
      return($url);   
  } elseif (ereg("^(([[:alnum:]._-]+)+)((\\.[[:alnum:]_-]+)+)$",$url,$regs)) {
     $url = "http://" . $regs[2] . $regs[3];  
     $hostname = $regs[2] . $regs[3];  
    $path = $regs[5];
    return($url);    
   } else {
      return("");
   }
}

[skipped]

***********  test.php  *********************

[skipped]

if($link){
   $validURL = validateURL($link);
   if(!$validURL) {
   $errmsg = "Error: URL not validate!";
   }
}   

[skipped]

Оффлайн Салажонок

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
А если подправить скрипт вот так...
« Ответ #2 : 06 Марта 2002, 17:05:05 »
... то автоматически происходит подстановка http://  в URL-адрес,  если пользователь забыл ввести.


*********** test.php *********************

[skipped]
if($link){
   $validURL = validateURL($link);
   if(!$validURL) {
      $errmsg = "Error: URL not validate!";
   }
   else{
      $link = $validURL;
   }
}   

[skipped]

Оффлайн Pr0Head

  • Members of GreenPeace
  • Постоялец
  • ***
  • Сообщений: 219
  • +0/-0
  • 2
    • Просмотр профиля
    • http://digital-market.ru
Честно признаться не знаю как это сделать.

Но если возможно это сделать как я думаю (просто я никогда не работал с http запросами/ответами), то можно так:

1) Принимаем УРЛ от пользователя
2) Посылаем запрос по этому адресу
3) Если оттуда приходит ответ о наличии такой страницы (по-моему ответ HTTP/200), то скрипт выполняет ОК.

То есть вопрос сводится к тому, как послать запрос на какой-то адрес, и принять от него ответ сервера.
Банк выполнил недопустимую операцию и будет закрыт!

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
faq.saterenko.ru - там есть пример того что Pr0Head написал
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Dm

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1263
  • +0/-0
  • 0
    • Просмотр профиля
    • http://

function pregtrim($str) {
   return 
preg_replace("/[^\\x20-\\xFF]/","",@strval($str));
}

function 
checkurl($url) {
   
$url=trim(pregtrim($url));
   if (
strlen($url)==0) return 1;
   if (!
preg_match("~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}".
   
"(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\\.)+(?:com|net|".
   
"org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?".
   
"!0[^.]|255)[0-9]{1,3}\\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&".
   
"?+=\\~/-]*)?(?:#[^ \'\\"&<>]*)?$~i",$url,$ok))
   return -1;
   if (!strstr(
$url,"://")) $url="http://".$url;
   
$url=preg_replace("~^[a-z]+~ie","strtolower(\'\\\\0\')",$url);
   return 
$url;
}

с уважением,
магистр белой магии.

Оффлайн Oak

  • Дерево
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1481
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Пойти по этому URL и посмотреть ошибки ;)


fopen ?
[основной броузер - SeaMonkey] Netscape Communicator 4 - is the best :) // see sources

Оффлайн Dm

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1263
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Oak
мысль! а если она в целом не правильная?
мало того, так можно сервер зафлудить.
с уважением,
магистр белой магии.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28