Как добавить 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

Ответ 1

Измененная версия кода @nickf:

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

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

Ответ 2

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

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

Ответ 3

Просто проверьте, существует ли протокол (обозначается символом "://" ) и добавьте "http://", если этого не произошло.

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

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

Ответ 4

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

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

Ответ 5

Лучший ответ для этого будет примерно таким:

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

Ответ 6

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

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

Ответ 7

<?php

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

?>

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

Ответ 8

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

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

*: то есть, префиксы типа "fttps://" считаются действительными.

Ответ 9

используйте prep_url ($ url);

$url = prep_url($url);

если проверить, существует ли HTTP, ничего не происходит, иначе он добавляет http://