W PHP, filter_var('www.example.com', FILTER_VALIDATE_URL)
zwraca false
. Czy to jest poprawne? Czy poprawny adres URL lub protokoły (http: //, ftp: // itd.) Nie muszą być poprawne pod względem poprawnego adresu URL?Czy parametr FILTER_VALIDATE_URL jest zbyt rygorystyczny?
Odpowiedz
To nie jest prawidłowy URL. Przedrostkowanie rzeczy za pomocą http://
nigdy nie było bardzo przyjazne dla użytkownika, więc nowoczesne przeglądarki zakładają, że masz na myśli http, jeśli po prostu wpisujesz nazwę domeny. Biblioteki oprogramowania są, słusznie, trochę bardziej wybredne!
Jedną z metod, którą można zastosować, jest przeciągnięcie ciągu znaków przez parse_url, a następnie dodanie brakujących elementów, np.
if ($parts = parse_url($url)) {
if (!isset($parts["scheme"]))
{
$url = "http://$url";
}
}
Co ciekawe, podczas korzystania FILTER_VALIDATE_URL, to faktycznie korzysta parse_url wewnętrznie, aby dowiedzieć się, co program jest (view source). Dzięki salathe za zauważenie tego w komentarzach poniżej.
Adres URL musi odpowiadać zasadom podanym w RFC 2396 i zgodnie z tą specyfikacją wymagany jest protokół.
Część schematu ("protokół") jest wymagana dla FILTER_VALIDATE_URL
.
Oprócz odpowiedzi Paula Dixona, chcę powiedzieć, że można użyć flags dla FILTER_VALIDATE_URL
, aby określić, która część adresu URL musi zostać przedstawiona.
FILTER_FLAG_SCHEME_REQUIRED
FILTER_FLAG_HOST_REQUIRED
FILTER_FLAG_PATH_REQUIRED
FILTER_FLAG_QUERY_REQUIRED
od PHP 5.2.1 i FILTER_FLAG_HOST_REQUIRED
FILTER_FLAG_SCHEME_REQUIRED
flagi stosowane domyślnie i, niestety, nie ma sposobu, aby je wyłączyć (ty nie zrobić coś filter_var($url, FILTER_VALIDATE_URL, ~FILTER_FLAG_SCHEME_REQUIRED);
jeśli istnienie części schematu URL robi niekoniecznie). Wygląda to jak błąd dla mnie. Istnieje krewny bugreport.
Chciałbym, żeby to zadziałało, ale nie mogę go dostać. –
Wygląda na to, że nie sprawdza poprawności adresów URL. https://3v4l.org/1TjA5 – Derokorian
@RussellSilva, Derokorian Masz rację, nie mogę sprawić, żeby działało. Wygląda jak błąd dla mnie. Zaktualizowałem swoją odpowiedź. –
- 1. wykryć, czy przesłany plik jest zbyt duży
- 2. Czy deterministyczny jest parametr hashCode() języka Java?
- 3. Sprawdź, czy parametr jest modułem Python?
- 4. PHP - Czy parametr referencyjny jest opcjonalny?
- 5. Zanikanie Jquery'ego jest zbyt szybkie.
- 6. Aktualizacja zbiorcza jest zbyt powolna.
- 7. Git Clone jest zbyt wolny
- 8. tf.nn.depthwise_conv2d jest zbyt wolny. Jest to normalne?
- 9. Rozmiar JFrame jest zbyt mały
- 10. org.apache.subversion.javahl.ClientException - klient jest zbyt stary
- 11. przesłonić specyfikator jako parametr szablonu - czy jest prawidłowy?
- 12. Parametr C# jest nieprawidłowy
- 13. Czy jest coś takiego jak zbyt wiele zajęć?
- 14. Czy ten obraz jest zbyt złożony dla płytkiego klasyfikatora NN?
- 15. Czy Redis jest zbyt wolny dla produkcji Railsów I18n?
- 16. Czy Graphics.DrawImage jest zbyt wolny dla większych obrazów?
- 17. Czy jest zbyt wcześnie, aby używać ARC do nowych projektów?
- 18. Liczba aktywnych połączeń Mysqlnd jest zbyt duża. Czy to normalne?
- 19. mysqli_poll() - jaki jest trzeci parametr?
- 20. Co to jest parametr SynchronizationContext.IsWaitNotificationRequired?
- 21. Jaki jest drugi parametr NSLocalizedString()?
- 22. Scala: Czy parametr type kolekcji przetrwa "zbieranie", gdy parametr type jest typem członka
- 23. Jak ustalić, czy parametr typu jest podtypem cechy?
- 24. Ustal, czy parametr/zmienna jest wartością lambda ("is_a?")?
- 25. Sprawdź, czy parametr jest pusty lub pusta w procedurze przechowywanej.
- 26. Czy parametr LOC jest poprawny do oszacowania projektu?
- 27. Czy to jest opcjonalny parametr błędu kompilatora C# 4.0?
- 28. Czy jest możliwe, aby parametr implementował dwa interfejsy?
- 29. Czy jest możliwy parametr dostawcy danych TestNG w metodzie setUp?
- 30. Jak sprawdzić, czy ogólny parametr typu jest zerowalny?
Dzięki za wyjaśnienie! Użyję metody 'parse_url', o której mówisz, podoba mi się lepiej niż' filter_var' – federicot
Środa Ciekawostki: 'FILTER_VALIDATE_URL' używa' parse_url() ', aby sprawdzić, czy istnieje schemat. – salathe
Nice! Dodam to do odpowiedzi! –