通过FILTER_VALIDATE_URL验证URL

时间:2014-10-21 14:35:58

标签: php validation

我正在通过FILTER_VALIDATE_URL函数验证网址。

$url_1 = "http://example.com";
$url_2 = "http://http://example.com";

if (filter_var($url_1, FILTER_VALIDATE_URL)) {
    echo "URL is valid";
}
else {
    echo "URL is invalid";
}

它在$url_1$url_2中为我提供了有效的网址消息。它应该不是那样的。第二个URL无效。 解决此问题的正确方法是什么? 感谢。

3 个答案:

答案 0 :(得分:0)

根据validation filters上的文档,FILTER_VALIDATE_URL将验证RFC 2396 standards的网址。

还有关于examples that still pass the FILTER_VALIDATE_URL filter的讨论。

这意味着您可以使用过滤器进行某些验证,但是如果您需要100%有效的URL,则不能依赖它,因为某些条件仍会满足RFC,另外还有有效的网址仍然可以返回404

测试有效网址的最佳方法是在验证网址后对其进行实际测试as per this SO answer

答案 1 :(得分:0)

您可以使用PHP函数checkdnsrr()来检查与给定Internet主机名或IP地址对应的DNS记录:

$url = "wrong_url.com";
if(filter_var($url, FILTER_VALIDATE_URL) && checkdnsrr(($url),"A")) {
    echo "URL is valid";
}
else {
    echo "URL is invalid";
}

答案 2 :(得分:0)

之前已将其作为错误提交:

https://bugs.php.net/bug.php?id=64173

https://bugs.php.net/bug.php?id=65141

但它符合RFC:http://www.ietf.org/rfc/rfc2396.txt

Quick BNF evaluation

absoluteURI
    scheme http
    :
    hier_part
        net_path
            //
            authority
                server
                    hostport http:

            abs_path
                /
                segment
                segment /www.google.com

如果您愿意,可以使用其他更严格的功能:https://github.com/franksrevenge/StrictUrlValidator