Как добавить http: / / если он не существует в URL?


как я могу добавить http:// к URL-адресу, если он еще не включает протокол (например,http://,https:// или ftp://)?

пример:

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
8 102

8 ответов:

модифицированная версия кода @nickf:

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

признает ftp://,ftps://,http:// и https:// в случае нечувствительным образом.

на момент написания ни один из ответов не использовал встроенную функцию для этого:

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"

Читайте также: parse_url()

просто проверьте, есть ли протокол (обозначенный "://") и добавьте "http://", если его нет.

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

Примечание: это может быть простое и понятное решение, но ответ Джека с помощью parse_url это почти так же просто и намного надежнее. Вы, вероятно,должны использовать это.

сканировать строку ://, если он не имеет его, подставляла http:// в строку.. все остальное просто использовать строку как есть.

это будет работать, если у вас нет мусорной входной строки.

лучшим ответом на это будет что-то вроде этого :

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

nickf решение изменено:

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

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

?>

этот код добавит http: / / к URL, если его там нет.

попробуйте это. Не водонепроницаемый*, но может быть достаточно хорошо:

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

*: то есть префиксы типа "fttps://" считаются допустимыми.