我的网站上有一个文本框,人们可以在其中提交网址。大多数情况下输入错误的网址如下:
http://www.website.com?id=1
http://www.website.com/#/gls
http://www.website.com/post/test
但我希望他们输入他们的基本网址,这意味着:http://www.website.com
考虑到我的url地址存储在$url
变量中,我怎样才能实现这一目标?
我有一些想法,但我认为这不是一个很好的解决方案。例如,我想在"之后拆分域名。"然后以某种方式获得域扩展而不使用其余的useles代码。
答案 0 :(得分:2)
您可以将PHP parse_url()
function与PHP_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'>