117 votes

Comment ajouter http:// s'il n'existe pas dans l'URL ?

Comment puis-je ajouter http:// à une URL si elle n'inclut pas déjà un protocole (par ex. http:// , https:// o ftp:// ) ?

Exemple :

addhttp("google.com"); // http://google.com
addhttp("www.google.com"); // http://www.google.com
addhttp("google.com"); // http://google.com
addhttp("ftp://google.com"); // ftp://google.com
addhttp("https://google.com"); // https://google.com
addhttp("http://google.com"); // http://google.com
addhttp("rubbish"); // http://rubbish

1 votes

Si tu l'avais fait, mozilla.org seul, comment saurais-tu si ça doit l'être, http , https o ftp ?

7 votes

@Anthony : il dit qu'il veut ajouter "http://" s'il n'y a pas d'autre protocole.

3 votes

@Anthony Mais lorsque l'utilisateur tape l'url sans http:// ou autre, vous vous attendez à ce que ce soit ftp:// ou autre ?

272voto

Alix Axel Points 63455

Une version modifiée du code de @nickf :

function addhttp($url) {
    if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
        $url = "http://" . $url;
    }
    return $url;
}

Reconnaît ftp:// , ftps:// , http:// y https:// de manière insensible à la casse.

5 votes

Après avoir comparé addhttp et addscheme ci-dessous, je suis arrivé à la conclusion que addscheme est meilleur en termes de performances : $url = "www.google.com"; $init = microtime(true); for( $i = 1; $i < 100000; $i++ ) { addScheme( $url ); } echo microtime(true) - $init; echo "<BR>"; $init = microtime(true); for( $i = 1; $i < 100000; $i++ ) { addhttp( $url ); } echo microtime(true) - $init;

0 votes

Que faire si l'url commence par '//' ?

149voto

Jack Points 88446

Au moment de la rédaction de ce document, aucune des réponses n'utilisait une fonction intégrée pour cela :

function addScheme($url, $scheme = 'http://')
{
  return parse_url($url, PHP_URL_SCHEME) === null ?
    $scheme . $url : $url;
}

echo addScheme('google.com'); // "http://google.com"
echo addScheme('https://google.com'); // "https://google.com"

Voir aussi : parse_url()

17 votes

Cela devrait être la réponse choisie - pourquoi créer son propre code quand la langue a un support natif ? Bon travail.

2 votes

Une amélioration qui pourrait être apportée à cette fonction serait de vérifier si le champ a une valeur afin de ne pas ajouter un http à un champ vide.

1 votes

Cela ne fonctionne pas avec les protocoles relatifs, par exemple. echo addScheme('//google.com');

51voto

Brenton Alker Points 4739

Vérifiez simplement s'il existe un protocole (délimité par "://") et ajoutez "http://" s'il n'y en a pas.

if (false === strpos($url, '://')) {
    $url = 'http://' . $url;
}

Note : Il s'agit peut-être d'une solution simple et directe, mais Réponse de Jack en utilisant parse_url est presque aussi simple et beaucoup plus robuste. Vous devriez probablement l'utiliser.

1voto

Rosdi Kasim Points 3588

Recherchez dans la chaîne de caractères :// . S'il ne l'a pas, ajoutez http:// à la corde... Pour tout le reste, il suffit d'utiliser la chaîne telle quelle.

Cela fonctionnera à moins que vous n'ayez une chaîne de caractères de mauvaise qualité.

0 votes

Je préférerais une version regex :)

3 votes

Ne soyez pas trop rapide sur les regex. La regex a tendance à être difficile à lire et elle pourrait introduire un autre problème/bogue une fois que le problème a pris de l'ampleur.

0voto

nickf Points 185423

Essaie ça. Ce n'est pas étanche 1 mais ça pourrait être suffisant :

function addhttp($url) {
    if (!preg_match("@^[hf]tt?ps?://@", $url)) {
        $url = "http://" . $url;
    }
    return $url;
}

1. En d'autres termes, les préfixes tels que "fttps://" sont considérés comme valides.

6 votes

Cela correspondrait (c'est-à-dire qu'il retournerait vrai et que si serait évalué à faux) à des combinaisons bizarres comme htps, fttps, fttp, htp, je suppose.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X