web-dev-qa-db-fra.com

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 exemple, http://, https:// ou 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
107
Ryan

Une version modifiée du code @nickf:

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

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

251
Alix Axel

Au moment de la rédaction de ce document, aucune des réponses n’utilisait une fonction intégrée à cet effet:

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()

126
Ja͢ck

Il suffit de vérifier s’il existe un protocole (défini par ": //") et d’ajouter "http: //" s’il n’en existe pas.

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

Note: Cela peut être une solution simple et directe, mais la réponse de Jack en utilisant parse_url est presque aussi simple et beaucoup plus robuste. Vous devriez probablement utiliser celui-là.

50
Brenton Alker

Scannez la chaîne pour ://, s'il ne l'a pas, préfixez http:// à la chaîne .., tout le reste utilise la chaîne telle quelle.

Cela fonctionnera sauf si vous avez une chaîne de saisie de déchets.

1
Rosdi Kasim

La meilleure réponse à cela serait quelque chose comme ça:

function addhttp($url) 
{
  return $url = empty(parse_url($url)['scheme']) ? 'http://' . ltrim($url, '/') : $url;
}
1
ThisDude

nickf solution modifiée:

function addhttp($url) {
    if (!preg_match("@^https?://@i", $url) && !preg_match("@^ftps?://@i", $url)) {
        $url = "http://" . $url;
    }
    return $url;
}
0
kamasheto
<?php

if (!preg_match("/^(http|ftp):/", $_POST['url'])) {
   $_POST['url'] = 'http://'.$_POST['url'];
}
$url = $_POST['url'];

?>

ce code ajoutera http: // à l’URL s’il n’y en a pas.

0
ayan