web-dev-qa-db-fra.com

Valider une URL dans PHP

Dupliquer possible:
PHP validation/regex pour l'URL

Existe-t-il un moyen simple, sécurisé et rapide de vérifier si une URL est valide en PHP?

22

Oui il y a! Utilisez filter_var :

if (filter_var($url, FILTER_VALIDATE_URL) !== false) ...

FILTER_VALIDATE_URL valide les URL selon RFC 2396 .

54
Dan Grossman

Eh bien, si nous regardons RFC 3986 nous pouvons trouver la définition d’une URL.

Et si vous regardez l’annexe B, il existe un guide sur l’utilisation d’expressions régulières pour analyser une URL:

Annexe B. Analyse d'une référence URI avec une expression régulière

Comme l'algorithme "first-match-wins" est identique à l'algorithme "glouton"
la méthode d’homonymie utilisée par les expressions rationnelles POSIX, c’est
naturel et banal d'utiliser une expression régulière pour analyser le
potentiel de cinq composants d’une référence d’URI.

La ligne suivante est l’expression régulière permettant de décomposer un
référence d'URI bien formée dans ses composants.

  ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
   12            3  4          5       6  7        8 9

Les chiffres de la deuxième ligne ci-dessus servent uniquement à aider lisibilité; ils indiquent les points de référence pour chaque sous-expression (c'est-à-dire chaque parenthèse appariée). Nous nous référons à la la valeur correspond à la sous-expression en tant que $. Par exemple, correspondance l'expression ci-dessus à

  http://www.ics.uci.edu/pub/ietf/uri/#Related

résulte dans les correspondances de sous-expression suivantes:

  $1 = http:
  $2 = http
  $3 = //www.ics.uci.edu
  $4 = www.ics.uci.edu
  $5 = /pub/ietf/uri/
  $6 = <undefined>
  $7 = <undefined>
  $8 = #Related
  $9 = Related

où indique que le composant n'est pas présent, sous la forme est le cas du composant de requête dans l'exemple ci-dessus. Par conséquent, nous pouvons déterminer la valeur des cinq composants comme suit:

  scheme    = $2
  authority = $4
  path      = $5
  query     = $7
  fragment  = $9

En allant dans le sens opposé, nous pouvons recréer une référence URI à partir de ses composants en utilisant l'algorithme de la section 5.3.

Vous pouvez utiliser cette expression régulière pour analyser l’URL manuellement ou utiliser la fonction parse_url intégrée disponible dans PHP 4 et 5.

14
Devin M

Cela dépend de votre définition de valide. Sémantiquement valide, le nom de domaine est résolu, etc. 

L’approche rapide consisterait à utiliser preg_match pour tester l’URL par rapport à une bonne expression régulière afin de valider son format. Il semble y avoir de bons exemples sur ce fil de discussion PHP validation/regex pour URL

0
Code Magician