Php 如何在没有www、subdomain和com/net/org/etc的情况下获取域名

Php 如何在没有www、subdomain和com/net/org/etc的情况下获取域名,php,url,dns,Php,Url,Dns,我只需要从url中获取域名,(没有com和其他内容)示例: 我有: http://www.subdomain.domain1.com/ www.subdomain.domain2.net subdomain.subdomain2.domain3.org/ http://domain4.com 我想了解PHP: domain1 domain2 domain3 domain4 使用“PHP\u URL\u HOST”参数 然后在“.”上提取结果数组的倒数第二个元素以获取域,您可以使用$\u S

我只需要从url中获取域名,(没有com和其他内容)示例:

我有:

http://www.subdomain.domain1.com/
www.subdomain.domain2.net
subdomain.subdomain2.domain3.org/
http://domain4.com
我想了解PHP:

domain1
domain2
domain3
domain4

使用“PHP\u URL\u HOST”参数


然后在“.”上提取结果数组的倒数第二个元素

以获取域,您可以使用
$\u SERVER[“SERVER\u NAME”]

使用不希望包含的子域分解字符串

例如。 subdomain.domain.com

<?php
$add=explode('subdomain.',$_SERVER["SERVER_NAME"])[1];
// $add = domain.com
?>


希亚姆的答案是最好的。您只需确保所有URL都以HTTP开头,并在末尾添加strtok(见下文)。下面是另一个使用阵列的版本:

function get_domain($url)
    {
    $urlobj = parse_url($url);
    $domain = $urlobj['host'];
    if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs))
        {
        return $regs['domain'];
        }

    return false;
    }

$urls = array(
    'http://www.subdomain.domain1.com/',
    'http://www.subdomain.domain2.net',
    'http://subdomain.subdomain2.domain3.org/',
    'http://domain4.com'
);

// Using foreach + strtok to remove .[domain extensions]

echo "<ul>";

foreach($urls as $url)
    {
    echo "<li>" . strtok(get_domain($url),'.') . "</li>";
    }

echo "</ul>";
函数获取域($url)
{
$urlobj=解析url($url);
$domain=$urlobj['host'];
if(preg_match('/(?P[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i',$domain,$regs))
{
返回$regs['domain'];
}
返回false;
}
$URL=数组(
'http://www.subdomain.domain1.com/',
'http://www.subdomain.domain2.net',
'http://subdomain.subdomain2.domain3.org/',
'http://domain4.com'
);
//使用foreach+strtok删除。[域扩展]
回声“
    ”; foreach($url作为$url) { echo“
  • ”.strtok(get_domain($url),”)。“
  • ”; } 回声“
”;
这将输出:

  • 域1
  • 域2
  • 域3
  • 域4
    • 另外,您可以将strtok添加到函数中,如下所示:

      function get_domain($url)
          {
          $urlobj = parse_url($url);
          $domain = $urlobj['host'];
          if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs))
              {
              return strtok($regs['domain'], '.');
              }
      
          return false;
          }
      
      函数获取域($url)
      {
      $urlobj=解析url($url);
      $domain=$urlobj['host'];
      if(preg_match('/(?P[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i',$domain,$regs))
      {
      返回strtok($regs['domain'],'.');
      }
      返回false;
      }
      
      然后:

      $url=array(
      'http://www.subdomain.domain1.com/',
      'http://www.subdomain.domain2.net',
      'http://subdomain.subdomain2.domain3.org/',
      'http://domain4.com'
      );
      //使用foreach
      回声“
        ”; foreach($url作为$url) { 回显“
      • ”。获取域($url)。“
      • ”; } 回声“
      ”;
      减去ul/li:

       $urls = array(
              'http://www.subdomain.domain1.com/',
              'http://www.subdomain.domain2.net',
              'http://subdomain.subdomain2.domain3.org/',
              'http://domain4.com'
          );
      
          // Using foreach
          foreach($urls as $url)
              {
              echo get_domain($url)."<br>";
              }
      
      $url=array(
      'http://www.subdomain.domain1.com/',
      'http://www.subdomain.domain2.net',
      'http://subdomain.subdomain2.domain3.org/',
      'http://domain4.com'
      );
      //使用foreach
      foreach($url作为$url)
      {
      echo获取域($url)。“
      ”; }
      输出:

      域1
      域2
      域3
      domain4

      基于并采用所建议的概念来获取名称空间的倒数第二个元素,我可能建议使用一个更简单的正则表达式,它利用锚定的前瞻性,如下所示:

      函数获取域($url){
      $matches=[];
      preg_match('/[\w-]+(?=(?:\.\w{2,6}){1,2}(?:\/\124;$)/',$url,$matches);
      返回$matches[0];
      }
      
      火柴

      • 中的名称
        https://www.names.co.uk/
  • 中的域1
    http://www.subdomain.domain1.com/
  • www.subdomain.domain2.net中的
    domain2
  • subdomain.subdomain2.domain3.org/
  • in
    http://domain4.com
  • seventymm
    in
    http://www.seventymm.co.in/browse/buy-home-furnishing-bed-sheets-pack-of-3/2456/1/v2034/0/0/1/2/1/0/go

  • 但如何获得倒数第二个元素?所以我可以用解决方案更新帖子。谢谢请注意可能包含顶级域名的URL,例如
    .co.uk
    (顺便问一下,这些域名也被正式称为顶级域名吗?)等等。@fireeydboy说得很好!如果你只有IP,它也不起作用。这不是一个灵活的解决方案-它只在子域已知时起作用。
     $urls = array(
            'http://www.subdomain.domain1.com/',
            'http://www.subdomain.domain2.net',
            'http://subdomain.subdomain2.domain3.org/',
            'http://domain4.com'
        );
    
        // Using foreach
        foreach($urls as $url)
            {
            echo get_domain($url)."<br>";
            }