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

时间:2010-05-04 00:22:54

标签: php regex

如果网址尚未包含协议(例如http://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 个答案:

答案 0 :(得分:250)

@nickf代码的修改版本:

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

以不区分大小写的方式识别ftp://ftps://http://https://

答案 1 :(得分:123)

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

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

答案 2 :(得分:50)

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

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

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

答案 3 :(得分:1)

扫描://的字符串,如果没有,请在字符串前面添加http:// ..其他所有字符串都按字符串使用。

除非您有垃圾输入字符串,否则这将有效。

答案 4 :(得分:1)

对此最好的答案是这样的:

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

答案 5 :(得分:0)

修改了nickf解决方案:

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

答案 6 :(得分:0)

<?php

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

?>

如果不存在,此代码会将http://添加到URL。

答案 7 :(得分:-1)

试试这个。不是水密*,但可能足够好:

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

*:即“fttps://”之类的前缀被视为有效。