0

filter_var($url, FILTER_FLAG_HOST_REQUIRED) 总是返回 false。下面是我的代码,我无法弄清楚为什么它在所有网址上都是错误的。

$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
4

2 回答 2

3

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

filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)
于 2018-05-01T07:17:44.560 回答
2

FILTER_FLAG_HOST_REQUIRED是一个选项,FILTER_VALIDATE_URL不能单独使用。

你应该做:

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

请注意FILTER_VALIDATE_URL使用过时的RFC2396 。

如果您想要更好的 URL 验证,请parse_url使用RFC3986,它已经过时 RFC2396 并更好地处理更现代的边缘情况。

于 2018-05-01T07:18:54.577 回答