php 如何添加http://如果它不存在的URL

nwwlzxa7  于 2023-10-15  发布在  PHP
关注(0)|答案(8)|浏览(138)

如何将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
iq0todco

iq0todco1#

@nickf代码的修改版本:

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

识别ftp://ftps://http://https://,不区分大小写。

cclgggtu

cclgggtu2#

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

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

wkyowqbh

wkyowqbh3#

只需检查是否有协议(用“://”表示),如果没有,则添加“http://”。

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

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

flmtquvp

flmtquvp4#

最好的答案是这样的:

function addScheme($url, $scheme="http://" )
{
  return $url = empty(parse_url($url)['scheme']) ? $scheme . ltrim($url, '/') : $url;
}
// Test below
$url = 'google.com';
echo addScheme($url,"ftp://"); // "https://google.com"
echo addScheme('google.com'); // "http://google.com"
echo addScheme('https://google.com'); // "https://google.com"

该协议灵活,所以同样的功能可以用ftp,https等。

7bsow1i6

7bsow1i65#

扫描字符串中的://。如果它没有它,则将http://前置到字符串.所有其他的东西都使用字符串。
这将工作,除非你有一个垃圾输入字符串。

6tr1vspr

6tr1vspr6#

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

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

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

oyjwcjzk

oyjwcjzk7#

nickf的解决方案修改:

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

djp7away8#

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

如果URL中没有 http://,则此代码会将其添加到URL中。

相关问题