Интересно, что было бы лучшим способом в php, чтобы проверить, если указанный URL-адрес является действительным … Сначала я попытался с:
filter_var($url, FILTER_VALIDATE_URL) === false
Но это не принимает www.example.com
(без протокола). Итак, я попробовал с простой модификацией:
protected function checkReferrerUrl($url) {
if(strpos($url, '://') == false) {
$url = "http://".$url;
}
if(filter_var($url, FILTER_VALIDATE_URL) === false) {
return false;
}
return true;
}
Теперь он отлично работает с www.example.com
но также принимает простые foo
как он преобразуется в http://foo
, Тем не менее, хотя это не действительный публичный URL, я думаю … так что бы вы предложили? Вернуться к традиционный регулярное выражение?
Я рекомендую, чтобы вы не использовали filter_var с типом URL.
Есть намного больше побочных эффектов.
Например, это допустимые URL-адреса в соответствии с filter_var:
http://example.com/"><script>alert(document.cookie)</script>
http://example.ee/sdsf"f
Кроме того, FILTER_VALIDATE_URL не поддерживает интернационализированные доменные имена (IDN).
Из соображений безопасности я рекомендую использовать регулярное выражение в сочетании с некоторыми ifs (например, для домена).
Без аспекта безопасности я использую parse_url, чтобы взять мои части. Но эта функция имеет аналогичную проблему, когда схема (без http / https) отсутствует.
Использовать этот
<?php
$url = 'www.example.com';
if(validateURL($url)){
echo "Valid";
}else{
echo "invalid";
}
function validateURL($URL) {
$pattern_1 = "/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i";
$pattern_2 = "/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i";
if(preg_match($pattern_1, $URL) || preg_match($pattern_2, $URL)){
return true;
} else{
return false;
}
}
?>
Попробуйте это тоже
<?php
// Assign URL to $URL variable
$url = 'http://example.com';
// Check url using preg_match
if (preg_match("/^(https?:\/\/+[\w\-]+\.[\w\-]+)/i",$url)){
echo "Valid";
}else{
echo "invalid";
}
?>