Все, что начинается с http: //, проверяется FILTER_VALIDATE_URL?

Я тестировал строки и int, которые я могу себе представить, пока он начинается с http: //, это будет действительный URL-адрес, используя FILTER_VALIDATE_URL. Итак, зачем нам FILTER_VALIDATE_URL? Почему бы просто не добавить http: // на вход, когда мы хотим сделать его действительным?

var_dump(filter_var ('http://example',FILTER_VALIDATE_URL )); 

Ну, технически, любой URI, который начинается со схемы (например, http:// ) и содержит допустимые символы URI после этого , действителен в соответствии с официальной спецификацией URI в RFC 3986 :

Каждый URI начинается со имени схемы, как определено в Разделе 3.1, которое относится к спецификации для назначения идентификаторов в рамках этой схемы. Таким образом, синтаксис URI является объединенной и расширяемой системой именования, в которой спецификация каждой схемы может дополнительно ограничивать синтаксис и семантику идентификаторов с использованием этой схемы.

Так что нет ничего странного в возвращении, которое вы получаете – вот что должно произойти. Что касается того, почему вы должны использовать filter_var с флагом FILTER_VALIDATE_URL … это более семантически целесообразно, чем делать что-то вроде следующего для каждой возможной схемы URL, не согласны ли вы?

 if (strpos($url, 'http://') === 0 || strpos($url, 'ftp://') === 0 || strpos($url, 'telnet://') === 0 ) { // it's a valid URL! }