以http://开头的任何内容都由FILTER_VALIDATE_URL验证


Anything start with http:// is validated by FILTER_VALIDATE_URL?

我用字符串和int进行了测试,我可以想象,只要它以http://开头,它就会是一个使用FILTER_VALIDATE_url的有效url。那么,为什么我们需要FILTER_VALIDATE_URL?为什么不只要我们想使输入有效,就在输入上添加http://呢?

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

从技术上讲,根据RFC 3986:中的官方URI规范,任何以方案(如http://)开头并在其后包含有效URI字符的URI都是有效的

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

所以,你得到的回报并没有什么奇怪的——这就是应该发生的事情。至于为什么要使用带有FILTER_VALIDATE_URL标志的filter_var。。。对于每一个可能的URL方案,它在语义上都比做下面这样的事情更合适,你不同意吗?

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