Forum Webscript.Ru

Программирование => PHP => Тема начата: Салажонок от 06 Марта 2002, 15:56:21

Название: Как проверить URL-адрес в форме на отсутствие ошибок?
Отправлено: Салажонок от 06 Марта 2002, 15:56:21
Причем, если в поле "URL" не введено ничего, то и проверять ничего не нужно.

Салажонок
Название: Кто может подправить?
Отправлено: Салажонок от 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]
Название: А если подправить скрипт вот так...
Отправлено: Салажонок от 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]
Название: Как проверить URL-адрес в форме на отсутствие ошибок?
Отправлено: Pr0Head от 06 Марта 2002, 17:50:28
Честно признаться не знаю как это сделать.

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

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

То есть вопрос сводится к тому, как послать запрос на какой-то адрес, и принять от него ответ сервера.
Название: Как проверить URL-адрес в форме на отсутствие ошибок?
Отправлено: Макс от 06 Марта 2002, 18:13:28
faq.saterenko.ru - там есть пример того что Pr0Head написал
Название: Как проверить URL-адрес в форме на отсутствие ошибок?
Отправлено: Dm от 06 Марта 2002, 19:07:50

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;
}

Название: Как проверить URL-адрес в форме на отсутствие ошибок?
Отправлено: Oak от 06 Марта 2002, 21:57:29
Пойти по этому URL и посмотреть ошибки ;)


fopen ?
Название: Как проверить URL-адрес в форме на отсутствие ошибок?
Отправлено: Dm от 06 Марта 2002, 22:45:15
Oak
мысль! а если она в целом не правильная?
мало того, так можно сервер зафлудить.