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_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
which uses RFC3986,它会废弃 RFC2396 并更好地处理更多现代边缘情况。
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_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
which uses RFC3986,它会废弃 RFC2396 并更好地处理更多现代边缘情况。