filter_var ($ url, FILTER_FLAG_HOST_REQUIRED) всегда возвращает false - PullRequest
0 голосов
/ 01 мая 2018

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

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

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 и лучше обрабатывает более современные крайние случаи.

0 голосов
/ 01 мая 2018

Второй параметр filter_var должен быть одним из первичных фильтров ; FILTER_FLAG_HOST_REQUIRED - это не фильтр, это флаг опции для фильтра FILTER_VALIDATE_URL. Итак:

filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)
...