5

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

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

1 回答 1

10

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

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

所以你得到的回报没有什么奇怪的——这就是应该发生的。至于为什么你应该使用filter_var带有FILTER_VALIDATE_URL标志的...它在语义上比对每个可能的 URL 方案执行类似以下的操作更合适,你不同意吗?

if (strpos($url, 'http://') === 0
    || strpos($url, 'ftp://') === 0
    || strpos($url, 'telnet://') === 0
) {
    // it's a valid URL!
}
于 2012-08-29T02:40:18.313 回答