【问题标题】:Get domain (without TLD) using PHP [duplicate]使用 PHP 获取域(没有 TLD)[重复]
【发布时间】:2012-08-10 18:43:54
【问题描述】:

可能重复:
Get the subdomain from a URL

我看过有关使用 parse_url 获取 www.domain.tld 的帖子,但我怎样才能使用 php 获取“域”?

我目前有这个正则表达式

$pattern = '@https?://[a-z]{1,}\.{0,}([a-z]{1,})\.com(\.[a-z]{1,}){0,}@';

但这仅适用于 .com,我需要它适用于所有 TLD(.co.uk、.com、.tv 等)

有没有可靠的方法来做到这一点,我不确定正则表达式是否是最好的方法?或者可能在“。”上爆炸。但是子域又会搞砸。

编辑

所以想要的结果是

$url = "https://stackoverflow.com/questions/11952907/get-domain-without-tld-using-php#comment15926320_11952907";

$output = "stackoverflow";

做更多的研究,有人会建议使用 parse_url 获取 www.domain.tld 然后使用 explode 获取域吗?

【问题讨论】:

标签: php


【解决方案1】:

试试这个正则表达式:

#^https?://(www\.)?([^/]*?)(\.co)?\.[^.]+?/#

【讨论】:

【解决方案2】:

您可以使用parse_url 函数。文档是here。

类似:

$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));

然后你就可以拿$url['host'] 做:

$arr = explode('.',$url['host']);
return $arr[count($arr) - 2];

【讨论】:

  • 尝试使用有效的 url,你会发现它不是预期的结果。数组([scheme] => http [host] => www.google.com [path] => /efafafafaf.php [query] => id=78abak)
  • 是的,如果你得到[host] 和explode() 并从尾部取出第二个元素,你就可以。
  • .co.uk 或 .org.br 或类似名称的中断。
【解决方案3】:

我认为你不需要正则表达式。

function getDomain($url){
    $things_like_WWW_at_the_start = array('www');
    $urlContents = parse_url($url);
    $domain = explode('.', $urlContents['host']);

    if (!in_array($domain[0], $things_like_WWW_at_the_start))
        return $domain[0];
    else
        return $domain[1];
}

【讨论】:

  • 这将检索完整的主机名,例如 www.google.com。 OP 只想获取 TLD(本例中为 google)
  • @MathieuImbert 谢谢。我已经编辑了我的答案。
  • 这看起来不错,您还建议我在数组中添加哪些其他内容以使其能够跨 url 正常工作?
  • @user1527354 由于许多网站使用子域来处理语言环境版本,我将添加常用语言代码:en, fr, de, ...
  • @user1527354 但是如果你有像 stackexchange 网站这样的 url,这个功能会变得非常糟糕。我的意思是你必须列出该数组中的所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2012-11-16
相关资源
最近更新 更多