How to add http:// if it doesn't exist in the URL

如果一个 URL 没有包含协议(例如 http://https://ftp://) ,我怎样才能将 http://添加到该 URL 中?

Example:

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
113149 次浏览

试试这个。它不是不透水的,但可能足够好:

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

1. 也就是说,像“ fttps://”这样的前缀被视为有效。

Nickf 的解决方案 修改:

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

@ nickf 代码的修改版本:

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

以对大小写不敏感的方式识别 ftp://ftps://http://https://

扫描字符串寻找 ://。如果它没有它,前面的字符串 http://... 其他的一切只是使用字符串原样。

This will work unless you have a rubbish input string.

只需检查是否有协议(由“ ://”描述) ,如果没有,则添加“ http://& quot;”。

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

注意 : 这可能是一个简单而直接的解决方案,但是使用 parse_url杰克的回答几乎同样简单并且更加健壮。你应该用那个。

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

这段代码将添加 http://到 URL,如果它不在那里。

在写这篇文章的时候,没有一个答案使用了一个内置函数:

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

最佳答案是这样的:

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

协议灵活,因此同样的功能可以用于 ftp、 https 等。

您应该使用这个 NPM 包: normalize-url

normalizeUrl(url, {
removeTrailingSlash: false,
stripWWW: false,
})