【问题标题】:Add http:// to the beginning of submitted url将 http:// 添加到提交的 url 的开头
【发布时间】:2014-03-12 21:02:33
【问题描述】:

我正在寻找将 http:// 添加到提交的 url 的最佳方式。我有一个网站,允许用户在注册时提交他们的网站 url,问题是一些用户输入“example.com”,一些用户输入“www.example.com”,一些用户输入“http(s)://example。 com”

我想要完成的是确保最终结果是“http(s)://example.com”,无论他们提交什么。

有什么方法可以做到这一点,并且仍然考虑 co.uk 或 https 等其他内容吗?

【问题讨论】:

  • 对不起,我应该把它包括在内,我正在寻找适用于 php 的东西。

标签: php


【解决方案1】:

您实际上并不需要 REGEX。 REGEX 通常非常昂贵。这是实现您的目标的自制函数:

function fix_url($url) {
    return (substr($url, 0, 7) == 'http://' || substr($url, 0, 8) == 'https://')
        ? $url 
        : 'http://'.$url;
}

样品:

$url = 'example.com';
$url1 = 'httpexample.com';
$url2 = 'http://example.com';
$url3 = 'https://example.com';

echo fix_url($url);
echo '<br>';
echo fix_url($url1);
echo '<br>';
echo fix_url($url2);
echo '<br>';
echo fix_url($url3);
echo '<br>';

输出:

http://example.com
http://httpexample.com
http://example.com
https://example.com

如果您有任何疑问,请考虑在下方添加评论。

参考资料:

【讨论】:

  • 如果提供的 URL 使用了 http 以外的协议怎么办?
  • @Ryan,OP 没有提到。
  • 这应该可以满足我的需要,非常感谢!
【解决方案2】:

考虑到 http(s)://,这是非常直接的,因为只有两个选项需要检查。即检查链接是否以“http://”或“https://”开头,如果不是,则添加“http://”。

您的问题的另一部分是解释“.co.uk”,您可以在字典中收集所有可用的后缀,这是一个非常糟糕的主意,或者您可以简单地检查是否存在“。”留下“。”之后的内容。用户的责任。

希望我回答了你的问题:)

【讨论】:

  • 是的,我肯定宁愿在“。”之后留下任何东西。我认为,取决于用户,如果他们希望人们找到他们的网站,他们应该确保其正确。至于寻找http(s),我应该用正则表达式吗?我见过很多正则表达式,但我还不够熟练,不知道哪个会起作用,似乎那里有成千上万的正则表达式,全都不同。这部分很重要,因为它决定了我如何链接到他们的网站,当有人进入 example.com 时,它只会创建一个像 MySite.com/example.com 这样的链接,这当然不好。
  • 不需要正则表达式,它很昂贵,你的情况是一个非常简单的字符串匹配。关于“MySite.com/example.com”,您现在可以验证站点是否错误,但可以进行简单的检查,例如检查多个点、分号...等。可以帮助您找到输入错误的网站并通知用户。除此之外,我不相信您可以验证所有输入网址的正确性:)
【解决方案3】:

对于 php,

$str = preg_replace('/(?m)^(?!https?:\/\/.+)(\S+)/',"http://$1",$str);

【讨论】:

  • 感谢您的宝贵时间,是否有适用于 php 的代码?我完全忘了说我在原始帖子中使用的是 php。
  • @Charlie php 标签是在事后编辑的。最初的问题没有提到语言。
  • @Charlie 不确定这是否是您的否决票,但是是的,理想情况下它会被删除,但评论通常就足够了,因为回答者不应该仅仅因为提问者不清楚。
  • @Davy8,感谢您的正当支持。正如您所说,原始问题确实提到了目标语言。还有,由于我不懂php,所以找php的解决方案需要很长时间。
  • @Gursel,@Davy8,这真的很简单:如果您删除答案,声誉将自动恢复到我投反对票之前的状态。相反,我的反对意见是非常必要的,因为对于这样的问题不再接受这个答案。这不是为了您或 OP 的利益,而是为了 SO 和用户的利益,他们会在我们寻找同样的问题之后浏览这些问题,找到不适合问题的答案。
【解决方案4】:

修复 URL 的简单方法 :)

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

    return $url;
}

【讨论】:

    【解决方案5】:

    在提交的 URL 中搜索“http”和“https”,如果搜索返回 null,则在开头添加“http”。 使用 Javascript: var mystring="example.com"; 变正常=-1; var 安全=-1; 正常=mystring.search(/http/i); 安全=mystring.search(/https/i); 等等

    【讨论】:

    • 不是javascript相关的问题
    猜你喜欢
    • 2014-03-06
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2012-08-14
    • 2017-10-15
    • 2012-01-04
    相关资源
    最近更新 更多