filter_var($url, FILTER_FLAG_HOST_REQUIRED) 总是返回 false

filter_var($url, FILTER_FLAG_HOST_REQUIRED) always returning false

filter_var($url, FILTER_FLAG_HOST_REQUIRED) 总是返回 false。下面是我的代码,我不明白为什么它在所有 url 上都是错误的。

$url = $this->input('website'); //form input

if ( $parts = parse_url($url) ) {
    if ( !isset($parts["scheme"]) )
        {
            $url = "https://$url";
        }
}

if (!filter_var($url, FILTER_FLAG_HOST_REQUIRED)) {
    dd('not valid  '.$url);
}
else {
    dd('valid  '.$url);
}

如果我在表格中输入'www.cnn.com',结果如下:

not valid https://www.cnn.com

filter_var的第二个参数必须是primary filters之一; FILTER_FLAG_HOST_REQUIRED 不是过滤器,它是 FILTER_VALIDATE_URL 过滤器的 选项标志 。所以:

filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)

FILTER_FLAG_HOST_REQUIREDFILTER_VALIDATE_URL 的一个选项,不能单独使用。

你应该这样做:

if (!filter_var($url, FILTER_VALIDATE_URL)) {
    dd('not valid  '.$url);
}
else {
   dd('valid  '.$url);
}

请注意 FILTER_VALIDATE_URL 使用的 RFC2396 已过时。

如果您想要更好的 URL 验证,请使用 parse_url which uses RFC3986,它会废弃 RFC2396 并更好地处理更多现代边缘情况。