从输入中获取基础网站 URL

Get base website URL from input

我的网站上有一个文本框,人们可以在其中提交 url 地址。大多数时候输入错误的 url 就像:

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

但我希望他们进入他们的基地url,意思是:http://www.website.com

考虑到我将他们的 url 地址存储在 $url 变量中,我该如何实现这一点?

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

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

像这样:

parse_url($url, PHP_URL_HOST);

这将 return www.example.com 用于 URL http://www.example.com/test

或者,要同时包含该方案,您可以尝试以下操作:

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

这将 return http://www.example.com 用于 URL http://www.example.com/test


如果您想对 return 第一个 / 之前的部分(除 http:// 之外)或 #?,其中任何一个是基础 url 中的无效字符? base 之后 URL 的任何部分都必须以这些字符之一开头。

像这样:

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

您可以使用 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
}

此版本支持 https。

第一个括号将捕获基数 url。

preg_match("/^(https?:\/\/.+)(\/|#|\?|)/U", $url, $anArray)
// Access to the base url
$anArray[1]