Я тестировал строки и 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! }