Sto tentando di convalidare utilizzando l'estensione di PHP filter_var()
. Per http://php.net/manual/en/filter.filters.validate.php:Convalida dell'URL con e senza protocollo con filter_var
valore Convalida come URL (secondo » http://www.faqs.org/rfcs/rfc2396), eventualmente con richieste componenti. Fare attenzione a un URL valido potrebbe non specificare il protocollo HTTP http: // quindi potrebbe essere necessaria un'ulteriore convalida per determinare l'URL utilizza un protocollo previsto, ad es. ssh: // o mailto :. Si noti che la funzione troverà validi gli URL ASCII; i nomi di dominio internazionalizzati (contenenti caratteri non ASCII) non avranno esito positivo.
Per quanto riguarda, Guardatevi un URL valido non può specificare il protocollo HTTP, il mio test di seguito indicano che è necessario un protocollo HTTP (URL 'stackoverflow.com/' is NOT considered valid.
). Come sto interpretando male la documentazione?
Inoltre, in che modo è impedito la convalida di URL come https://https://stackoverflow.com/ true?
PS. Sarebbero apprezzati eventuali commenti sul mio approccio di sanificazione del protocollo.
<?php
function filterURL($url) {
echo("URL '{$url}' is ".(filter_var($url, FILTER_VALIDATE_URL)?'':' NOT ').'considered valid.<br>');
}
function sanitizeURL($url) {
return (strtolower(substr($url,0,7))=='http://' || strtolower(substr($url,0,8))=='https://')?$url:'http://'.$url;
}
filterURL('http://stackoverflow.com/');
filterURL('https://stackoverflow.com/');
filterURL('//stackoverflow.com/');
filterURL('stackoverflow.com/');
filterURL(sanitizeURL('http://stackoverflow.com/'));
filterURL(sanitizeURL('https://stackoverflow.com/'));
filterURL(sanitizeURL('stackoverflow.com/'));
filterURL('https://https://stackoverflow.com/');
?>
USCITA:
URL 'http://stackoverflow.com/' is considered valid.
URL 'https://stackoverflow.com/' is considered valid.
URL '//stackoverflow.com/' is NOT considered valid.
URL 'stackoverflow.com/' is NOT considered valid.
URL 'http://stackoverflow.com/' is considered valid.
URL 'https://stackoverflow.com/' is considered valid.
URL 'http://stackoverflow.com/' is considered valid.
URL 'https://https://stackoverflow.com/' is considered valid.
L'ultimo causa alcuni problemi: 'https: // https: // stackoverflow.com /'. Quale versione di PHP stai usando? –
[Eval.in: PHP - PHP 5.5.14, incollato proprio ora] (https://eval.in/private/c0fba9b3d8befb). Non è quello che ci si aspetta. –
L'URL valido può specificare qualsiasi protocollo ** altro ** rispetto a HTTP, ma il protocollo è ancora obbligatorio. –