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