如果URL中不存在http://如何?

Rya*_*yan 107 php regex

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
Run Code Online (Sandbox Code Playgroud)

Ali*_*xel 251

@nickf代码的修改版本:

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

认识到ftp://,ftps://,http://https://在不区分大小写的方式.

  • 通过比较下面的addhttp和addscheme,我得出结论,addcheme在性能方面更好:`$ url ="www.google.com"; $ init = microtime(true); for($ i = 1; $ i <100000; $ i ++){addScheme($ url); } echo microtime(true) - $ init; echo"<BR>"; $ init = microtime(true); for($ i = 1; $ i <100000; $ i ++){addhttp($ url); } echo microtime(true) - $ init; ` (5认同)

Ja͢*_*͢ck 126

在撰写本文时,没有一个答案使用内置函数:

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"
Run Code Online (Sandbox Code Playgroud)

也可以看看: parse_url()

  • 这应该是选择的答案 - 为什么在语言具有原生支持时自己动手?干得好. (12认同)
  • 可以使用此功能进行的一项改进是检查该字段是否具有值,以便不向空字段添加http。 (2认同)
  • @Taylan 是的,你必须`ltrim($url, '/')` (2认同)

Bre*_*ker 50

只需检查是否有协议(由"://"描述)并添加"http://"(如果没有).

if (false === strpos($url, '://')) {
    $url = 'http://' . $url;
}
Run Code Online (Sandbox Code Playgroud)

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