我正在通过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无效。
解决此问题的正确方法是什么?
感谢。
答案 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