PHP 检查 url 是否有效

PHP check if url is valid

我想知道 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。然而,尽管这不是有效的 public url 我认为......那么你有什么建议?回到传统正则表达式?

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

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

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

出于安全原因,我建议之后使用正则表达式和一些 ifs(f.e。对于域)。 没有安全方面,我使用 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";
    }

?>