PHP检查url是否有效

时间:2015-08-20 08:21:53

标签: php url-validation

我想知道在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。但是,虽然这不是一个有效的公共网址,但我认为...所以你会建议什么?回到传统 regexp?

2 个答案:

答案 0 :(得分:3)

我建议您不要将filter_var与类型URL一起使用。 还有更多的副作用。 例如,根据filter_var:

,这些是有效的URL
http://example.com/"><script>alert(document.cookie)</script>
http://example.ee/sdsf"f

此外,FILTER_VALIDATE_URL不支持国际化域名(IDN)。

出于安全原因,我建议在之后使用正则表达式结合一些ifs(域名为f.e.)。 没有安全方面,我使用parse_url来获取我的部分。但是当缺少方案(没有http / https)时,此功能也有类似的问题。

答案 1 :(得分:0)

使用此

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

?>