filter_var($ url,FILTER_FLAG_HOST_REQUIRED)始终返回false

时间:2018-05-01 07:13:21

标签: php url php-7 filter-var

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

2 个答案:

答案 0 :(得分:3)

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

filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)

答案 1 :(得分:2)

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_urlRFC3986使用废弃RFC2396的https://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/,更好地处理更现代的边缘情况。