首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取基础域名php

获取基础域名php
EN

Stack Overflow用户
提问于 2018-09-03 07:23:58
回答 2查看 86关注 0票数 0
代码语言:javascript
复制
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和子域名,只返回主机,但它返回以下内容:

代码语言:javascript
复制
http://site.google.com ==> google.com
http://google.com      ==> com

如何让它在子域存在时将其删除,而不是在子域不存在时将其剥离到tld?

EN

回答 2

Stack Overflow用户

发布于 2018-09-03 07:48:26

parse_url开始,特别是parse_url($url)['host']

代码语言:javascript
复制
 $arr = parse_url($url);
 echo preg_replace('/^www\./', '', $arr['host'])."\n";

输出

代码语言:javascript
复制
site.google.com
google.com

Sandbox

这个正则表达式只匹配www.,如果它是字符串的开头,您可能可以通过几种方法来完成这一部分,例如使用

没有子域

如果你根本不想要任何子域:

代码语言:javascript
复制
$arr = parse_url($url)['host'];
echo preg_replace('/^(?:[-a-z0-9_]+\.)?([-a-z0-9_]+\..+)$/', '$1',$arr['host'])."\n";

Sandbox

无子域名,无国家/地区代码

代码语言:javascript
复制
$arr = parse_url($url)['host'];
echo preg_replace('/^(?:[-a-z0-9_]+\.)?([-a-z0-9_]+)(\.[^.]+).*?$/', '$1$2',$arr['host'])."\n";

Sandbox

它是如何工作的,

与前一个相同,但是域与主机是分离的,我们不是只捕获所有内容,而是捕获除.之外的所有内容,而在新组之外我们捕获所有内容(令人困惑的是。就是这里的所有内容),但对于*?,这意味着* 0或更多次,?非贪婪不会从前面的表达式中获取字符。

或者换一种说法。捕获任何0次或更多次,不要从以前的匹配中窃取字符。这样,如果没有像www.google.com这样的东西,我们只需要担心.com之后的东西,那么它就是0匹配。但如果它的www.google.com.uk.uk匹配。

单行应答

有些版本的PHP,我忘记了是什么版本,但更新的版本实际上可以让你做到这一点:

代码语言:javascript
复制
   $host = parse_url($url)['host'];

以最后一个例子为例,我们可以将其压缩到一行中,并删除变量赋值。

代码语言:javascript
复制
  echo preg_replace('/^(?:[-a-z0-9_]+\.)?([-a-z0-9_]+)(\.[^.]+).*?$/', '$1$2',parse_url($url)['host'])."\n";

See it in action

那只是为了好玩!

Summery

使用parse_url确实是一种“正确”的方式。或者是正确的开始方式,因为它去掉了很多其他的“东西”,给了你一个很好的起点。无论如何,这对我来说很有趣... :) .我需要从我的网站编码中解脱出来,因为它现在对我来说太乏味了(它已经有8年的历史了,所以我正在用WordPress重新编写它,而且我已经完成了无数个WordPress站点)……

干杯,希望它能帮上忙!

票数 2
EN

Stack Overflow用户

发布于 2018-09-03 08:31:31

找到答案了

代码语言:javascript
复制
$testAdd = "https://testing.google.co.uk";
$parse = parse_url($testAdd);
$httpreferer = preg_replace("/^([a-zA-Z0-9].*\.)?([a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z.]{2,})$/", '$2', $parse['host']);


echo $httpreferer;

这也将处理国家/地区TLD的域名

谢谢你的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52141692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档