Проверить, является ли отправленная строка URL-адресом?

поэтому у меня есть этот веб-сайт, где люди могут отправлять URL-адреса для определенных предметов, но я не знаю, как я могу проверить, что URL-адрес был отправлен, а не просто какое-то дерьмо!

У меня есть этот фрагмент кода:

if(filter_var('http://www.example.com/test.html', FILTER_VALIDATE_URL)) {
    echo 'this is URL';
} else {
    echo 'this is no url!';
}

Но этот фрагмент кода легко обойти, так как он проверяет только «http» в строке, и пользователи будут отправлять «хост» отдельно, поэтому мне нужно проверить, является ли $host допустимым хостом.

Спасибо заранее! вы, ребята, рок!


person Zenel Shabani    schedule 11.09.2013    source источник
comment
возможный дубликат валидации PHP/regex для URL   -  person Tobias Golbs    schedule 11.09.2013
comment
since it only checks for "http" in the string -- правда? Он проверяется в соответствии с faqs.org/rfcs/rfc2396.   -  person Amal Murali    schedule 11.09.2013
comment
Единственный способ проверить, действителен ли URL-адрес, — это вызвать его и посмотреть, что вы получите. Вы хотели бы сделать то же самое, например, для адресов электронной почты, но это, возможно, немного сложнее.   -  person Halcyon    schedule 11.09.2013


Ответы (2)


Вот пример, который решает вашу проблему:

<?php
$url = "http://www.example.com/test.html";
if (preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $url)) {
  echo "URL is valid";
}
else {
  echo "URL is invalid";
}
?>
person Charaf JRA    schedule 11.09.2013

Как насчет отправки HTTP-запроса?

function isValid($url) {
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_NOBODY, true); //make it a HEAD request
    curl_exec($curl);

    $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    curl_close($curl);

    return $statusCode == 200;
}

var_dump(isValid('http://www.google.co.uk')); // bool(true)
var_dump(isValid('some invalid URL')); // bool(false)
person George Brighton    schedule 11.09.2013