从输入中获取基本网站URL

时间:2016-08-05 23:33:01

标签: php regex url base-url

我的网站上有一个文本框,人们可以在其中提交网址。大多数情况下输入错误的网址如下:

http://www.website.com?id=1
http://www.website.com/#/gls
http://www.website.com/post/test

但我希望他们输入他们的基本网址,这意味着:http://www.website.com

考虑到我的url地址存储在$url变量中,我怎样才能实现这一目标?

我有一些想法,但我认为这不是一个很好的解决方案。例如,我想在"之后拆分域名。"然后以某种方式获得域扩展而不使用其余的useles代码。

3 个答案:

答案 0 :(得分:2)

您可以将PHP parse_url() functionPHP_URL_HOST参数一起使用。

像这样:

parse_url($url, PHP_URL_HOST);

这将为网址www.example.com返回http://www.example.com/test

或者,要包括该方案,您可以尝试以下方法:

parse_url($url, PHP_URL_SCHEME) . "://" . parse_url($url, PHP_URL_HOST);

这将为网址http://www.example.com返回http://www.example.com/test

如果您想使用正则表达式(正如您在标签中建议的那样)关于在第一个/之前(除了http://)或#之外返回该部分或?,其中任何一个都是基本网址中的无效字符?基数之后的URL的任何部分都必须以其中一个字符开头。

像这样:

preg_match("/^http:\/\/[^\/\?\#]+/", $url)

答案 1 :(得分:2)

您可以使用parse_url而不是正则表达式来取出您需要的部分,并将其与他们输入的内容进行比较:

// Get each part of the URL
$parts = parse_url($url);

// Rebuild the URL with only the scheme and domain (Without path, fragment, query string etc.)
$expected = $parts['scheme'] . '://' . $parts['host'];

// Compare the expected URL with what they user has entered.
if ($expected != $url) {
    // Do something
}

答案 2 :(得分:0)

此版本适用于https。

第一个括号将捕获基本网址。

<input type="submit" name="button2" onclick = "this.form.action = 'ExcelExportFile.php'" value='Export to Excel'>