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

Jen*_*nny 5 php validation uri

我测试了我能想象的字符串和int,只要它以http://开头,它就是一个使用FILTER_VALIDATE_URL的有效网址.那么,为什么我们需要FILTER_VALIDATE_URL?为什么不在我们想让它有效的时候在输入上添加http://?

var_dump(filter_var ('http://example',FILTER_VALIDATE_URL ));
Run Code Online (Sandbox Code Playgroud)

rdl*_*rey 10

那么在技术上,与方案开始(像任何URI http://),并包含有效的URI字符之后是有效的按照官方URI规范RFC 3986:

每个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!
}
Run Code Online (Sandbox Code Playgroud)