【发布时间】:2018-09-03 09:50:45
【问题描述】:
function getHost($Address) {
$parseUrl = parse_url(trim($Address));
return trim($parseUrl[host]
? $parseUrl[host]
: array_shift(explode('/', $parseUrl[path], 2))
);
}
$httpreferer = getHost($_SERVER['HTTP_REFERER']);
$httpreferer = preg_replace('#^(http(s)?://)?w{3}\.#', '$1', $httpreferer);
echo $httpreferer;
我正在使用它来剥离 http:// 、 www 和子域以仅返回主机,但它返回以下内容:
http://site.google.com ==> google.com
http://google.com ==> com
我如何让它只在子域存在时删除它,而不是在它不存在时剥离到 tld?
【问题讨论】:
-
这听起来像是一个非常困难的问题,因为 "subdomain" 并没有真正的意义。像
.co.uk这样的顶级域名你也会遇到很多困难 -
你的意思是它返回
http://site.google.com,因为这不会删除它见regex101.com/r/y1pVjt/1 -
@ArtisticPhoenix 感谢您添加。我盯着 OP 的正则表达式并在想 "但这只会删除 'www.'"
-
据我所知,该功能会删除除主机和子域之外的所有内容,然后 preg_replace 检查 www 或句点并在它离开域之前消除所有内容,但它似乎只适用于 www。而不是子域。例如,如果推荐人是 http://www。 site.com 返回变量将是 site.com ,但是如果引用者是 http:// sub.site.com ,则返回将是 sub.site.com 及其子。我想删除。
-
您最好从 URL 获取主机,然后解析来自
dig查询或其他内容的响应。您也可以通过一次调用从 parse_url 获取主机,parse_url($url, PHP_URL_HOST)
标签: php