2012-08-29 106 views
5

我使用字符串和int进行了测试,我可以想象,只要它以http://开头,它将是使用FILTER_VALIDATE_URL的有效URL。那么,为什么我们需要FILTER_VALIDATE_URL?为什么不在输入中添加http://就可以使其有效?任何以http://开头的内容都会被FILTER_VALIDATE_URL验证吗?

var_dump(filter_var ('http://example',FILTER_VALIDATE_URL)); 
+0

告诉我们你测试了什么,以及如何。 – 2012-08-29 02:32:51

+0

尝试使用http:// 20,http://示例,它们是否有效 – Jenny

+0

您用来做测试的rhe代码是? – 2012-08-29 02:38:21

回答

10

那么从技术上说,这是后的方案开始(如http://),包含合法的URI字符的任何URI是按照官方的URI规范有效RFC 3986

每个URI开始使用第3.1节中定义的方案名称,该名称引用了该方案中用于分配标识符的规范。如此,URI语法是联合且可扩展的命名系统,其中每个方案的规范可以进一步限制使用该方案的标识符的语法和语义。

所以,你得到的回报没有什么奇怪的 - 这就是应该发生的事情。至于为什么你应该使用filter_varFILTER_VALIDATE_URL这个标志......它比在每个可能的URL方案中做下面的事情更符合语义,你不同意吗?

if (strpos($url, 'http://') === 0 
    || strpos($url, 'ftp://') === 0 
    || strpos($url, 'telnet://') === 0 
) { 
    // it's a valid URL! 
} 
+0

时,http丢失了。我期望过滤器验证一个url是否包含有效的域名。所以,我的假设是错误的。 – Jenny

+1

@Jenny如果这就是你要找的,在完成过滤器调用后,只需将返回值传递给[''parse_url'](http://us.php.net/manual/en/function.parse-url。 PHP),你可以得到一个很好的关联数组,列出URI的组成部分。 – rdlowrey

+0

谢谢,我会尽力的。 – Jenny

相关问题