[PHP] Vérifier le format d'une URL - Tutoriel pour Webmasters  

Accueil > Tutoriels pour Webmasters > [PHP] Vérifier le format d'une URL

[PHP] Vérifier le format d'une URL

Sur un site web dynamique réalisé à l'aide de PHP, il arrive qu'un visiteur ou même un membre du site puisse ajouter une URL. C'est par exemple le cas avec les annuaires de sites (l'utilisateur doit ajouter l'adresse de son site à ajouter), ça peut aussi être le cas sur un page de contact où le visiteur doit entrer l'adresse de son site. Dès lors, il est pratique de pouvoir vérifier si le champ est rempli avec un texte qui ressemble à une URL ou non. Ce tutoriel est réalisé dans ce but, mais il permet juste de vérifier si une chaîne de caractère ressemble à une URL. Ça ne permet pas de vérifier si l'adresse internet est exacte.

Prérequis

Ce tutoriel donne des exemples de code PHP. Pour bien comprendre et appliquer ce qui est expliqué, il faut avoir des petites notions en PHP.

Utiliser la fonction filter_var()

La fonction filter_var() permet de tester facilement si une chaîne de caractère à le même format qu'une URL. En d'autres mots, la fonction vérifie qu'une chaîne de caractère ressemble ou non à une URL. Le premier paramètre n'est autre que la chaîne de caractère à tester et le second paramètre de cette fonction doit être "FILTER_VALIDATE_URL".

  1. <?php
  2. //$url = 'test'; // test avec une chaine qui n'est pas une URL
  3. $url = 'http://www.infowebmaster.fr/'; // test avec une chaîne qui est une URL
  4.  
  5. // Vérifie si la chaîne ressemble à une URL
  6. if (filter_var($url, FILTER_VALIDATE_URL)) {
  7. echo 'Cette URL est correct.';
  8. } else {
  9. echo 'Cette URL a un format non adapté.';
  10. }
  11. ?>

En utilisant le code ci-dessus, le message qui doit s'afficher est: "Cet URL est correct". Pour faire de plus ample test, rien n'empêche de modifier volontaire le contenu de la variable $url par un texte différent. Par exemple, si $url ne commence pas par "http://" il y a des chances pour que ce soit le texte "Cette URL a un format non adapté" qui soit affiché.

Utiliser une expression régulière

A la place d'utiliser la fonction précédente, il est tout autant possible d'utiliser une expression régulière (REGEX). Le code PHP ci-dessous est donc pratiquement identique met utilise une REGEX.

  1. <?php
  2. //$url = 'test'; // test avec une chaine qui n'est pas une URL
  3. $url = 'http://www.infowebmaster.fr/'; // test avec une chaine qui est une URL
  4.  
  5. // Vérifie si la chaîne ressemble à une URL
  6. if (preg_match('#^http://[w-]+[w.-]+.[a-zA-Z]{2,6}#i', $url)) {
  7. echo 'Cette URL est correct.';
  8. } else {
  9. echo 'Cette URL a un format non adapté.';
  10. }
  11. ?>

L'expression régulière utilisée ci-dessus vérifie que la chaîne commence par "http://" (ne vérifie pas s'il s'agit de "https"), puis vérifie qu'il y a au moins deux caractères, puis un point et après celui-ci une extension de 2 à 6 caractères (cf. ".com", ".fr", ".eu", ".info", ".gov", ".edu" ...). Pour finir, il peut y avoir n'importe quel autres caractères à la fin de cette chaîne.

A titre personnel, je considère que ce code est un peu moins bien que le code qui utilise la fonction filter_var().