【问题标题】:How can I get the Domain.ext from url? PHP prase如何从 url 获取 Domain.ext? PHP 语言
【发布时间】:2011-03-08 02:59:14
【问题描述】:

如果我们有

 $url = "http://subdomain.domin.ext/somepath/file.php";

如何获取 domain.ext

当我使用时

 $parse = parse_url($url);
 $domin = $parse[host];

那么 echo "$domain"; //this returns subdomain.domin.ext

有没有办法获取 domain.ext?

【问题讨论】:

  • 你如何定义“domain.ext”? “TLD 和第一个子域?” foo.bar.co.uk 域呢,你只想要“co.uk”吗?域不是“基于扩展的”,它们是从右到左的层次结构。
  • 我认为你可以从第一个句点到斜杠之前的字符进行子串。
  • @Kevin 人们可以拥有任意数量的子域。 a.b.c.d.e.f.g.co.uk
  • 您确实需要一个查找表来处理二级域名——“mod.uk”是您所说的扩展名,但“mod.us”是合法域名。
  • 另请注意,URL 中可能存在根目录:http://example.com./path

标签: php apache apache2


【解决方案1】:
$url = "http://subdomain.domin.ext/somepath/file.php";
$parse = parse_url($url);
$domain = $parse['host'];
$lastDot = strrpos($domain,'.');
$ext = substr($domain,$lastDot+1);

这将为您提供“ext”(例如“com”或“gov”)。对于像 amazon.co.uk 这样的东西,它会给你“英国”。如果您需要“co.uk”,则需要添加逻辑来检测某些 TLD(例如“uk”)并转到这些案例的第二个点。

【讨论】:

  • 这可能仅适用于顶级域 .net 和 .com .. 但如果您有类似 www.google.co.uk 的网址,例如它会给 co.uk..谢谢你的回答
  • 听起来你需要一个查找表,正如 Long Ears 建议的那样。
  • 你也可以使用 substr(strrchr($domain, '.'), 1).
【解决方案2】:
<?php
$url = "http://subdomain.domain.ext/somepath/file.php";
$parse = parse_url($url);
$domain = substr(strrchr($parse['host'], '.'), 1);
$domain = substr(strrchr(substr($parse['host'], 0, -strlen($domain)), '.'), 1). '.'. $domain;
if(in_array(strstr($domain, '.', true), array('co', 'com', 'net', 'org', 'edu', 'gov', 'mil')))
{
  $domain = substr(strrchr(substr($parse['host'], 0, -strlen($domain)), '.'), 1). '.'. $domain;
}
?>

【讨论】:

    【解决方案3】:

    如果您有一个具有不同 TLD 的特定域,例如 mysite.co.uk.com,那么您基本上可以执行以下操作:

    $url = 'http://mysite.co.uk/some-dir/';
    $domain_pos = strpos($url, 'mysite');
    $domain = substr($url, $domain_pos);
    $ext_pos = strpos($domain, '/');
    if($ext_pos !== false) { // extra check for paths/sub-dirs
      $domain = substr($domain, 0, $ext_pos); 
    }
    echo $domain;
    

    返回 mysite.co.uk 或分配给 $url 的任何 TLD。

    注意对路径和子目录的额外检查。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 2011-06-24
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 2011-03-01
      相关资源
      最近更新 更多