Как добавить 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 ответов:
модифицированная версия кода @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; }