【问题标题】:Get base website URL from input从输入中获取基本网站 URL
【发布时间】:2016-12-12 10:49:06
【问题描述】:

我的网站上有一个文本框,人们可以在其中提交 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 代码。

【问题讨论】:

  • 看看$_SERVER
  • 这对我有什么帮助? $_SERVER 与 php 变量无关,什么都没有。你读过这个问题吗?
  • @Diego 和 ArtisiticPhoenix OP 指的是 user-inputed 字符串(不是当前网站的基本 URL)。
  • @LambdaNinja 感谢兄弟支持我。

标签: php regex url base-url


【解决方案1】:

此版本适用于 https。

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

preg_match("/^(https?:\/\/.+)(\/|#|\?|)/U", $url, $anArray)
// Access to the base url
$anArray[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
}

【讨论】:

  • 简单明了的例子。 +1
【解决方案3】:

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

像这样:

parse_url($url, PHP_URL_HOST);

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

或者,也可以包含该方案,您可以尝试以下方法:

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

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


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

像这样:

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

【讨论】:

    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2020-08-25
    • 2012-07-12
    • 2011-07-21
    • 2018-06-26
    • 2016-11-28
    相关资源
    最近更新 更多