web-dev-qa-db-fra.com

Vérifier si une chaîne ne contient rien d'autre qu'une URL dans PHP

Je me demande s'il s'agit d'un moyen approprié de vérifier si une chaîne ne contient rien d'autre qu'une URL:

if (stripos($string, 'http') == 0 && !preg_match('/\s/',$string)) {
  do_something();
}

stripos () vérifie si la chaîne commence par "http"
preg_match () vérifie si la chaîne contient des espaces

Sinon, je suppose que la chaîne n'est rien d'autre qu'une adresse URL - mais cette hypothèse est-elle valable? Y a-t-il de meilleurs moyens d'y parvenir?

29
yan

Utilisez filter_var()

if (filter_var($string, FILTER_VALIDATE_URL)) { 
  // you're good
}

Les filtres peuvent être encore plus raffinés. Voir le manuel pour plus d'informations.

98
John Conde

Dans PHP, il existe un meilleur moyen de valider l'URL http://www.php.net/manual/en/function.filter-var.php

if(filter_var('http://example.com', FILTER_VALIDATE_URL)))
    echo 'this is URL';
8
Winston

Pour valider de manière plus sécurisée les URL (et celles non "ascii"), vous pouvez 

  1. Vérifiez avec le filtre (assurez-vous de vérifier le manuel sur quel filtre convient à votre situation) 
  2. Vérifiez s'il y a des enregistrements DNS

$string = idn_to_ascii($URL); if(filter_var($string, FILTER_VALIDATE_URL) && checkdnsrr($string, "A")){ // you have a valid URL }

0
CFP Support