如何将域名拆分为sld和tld(扩展名)?

时间:2012-02-07 11:51:06

标签: php regex

域名需要单独作为实际域名和扩展名返回

http://www.something.com

应该返回:sld = somethingtld= com

something.co.uk

应该返回:sld = somethingtld= co.uk

我对正则表达式并不熟悉,所以我真的需要一些帮助来处理它。

我想我可以使用parse_url(),然后查看host,但那又是什么?

8 个答案:

答案 0 :(得分:7)

只需使用PHP Explode Function,限制为2。

示例1:

var_dump(explode('.','example.com',2));

示例1结果:

array(2) { [0]=> string(7) "example" [1]=> string(3) "com" }

示例2:

var_dump(explode('.','example.uk.com',2));

示例2结果:

array(2) { [0]=> string(7) "example" [1]=> string(6) "uk.com" }

答案 1 :(得分:4)

正如您所说,您可以使用$urlCompontents=parseUrl($url)来获取主机名。然后,您可以使用explode(".",$urlCompontents["host"])将主机名拆分为不同的部分,例如。 array("example","co","uk")。你必须通过比较列表中的部分来完成剩下的工作,因为没有固定的规则,例如e.G. “uk”本身不被视为顶级域名,但“co.uk”是。但是你不需要任何正则表达式。

答案 2 :(得分:2)

这是我使用的。希望它有所帮助。

function extractTLD( $domain )
{
    $productTLD = '';
    $tempstr = explode(".", $domain);
    unset($tempstr[0]);
    foreach($tempstr as $value){
        $productTLD = $productTLD.".".$value;
    }    
    return $productTLD;
}

答案 3 :(得分:2)

使用parse_url($url,PHP_URL_HOST)获取主机名;然后使用下面的函数将域拆分为多个部分:

function split_domain($host,$SLDs='co|com|edu|gov|mil|net|org')
{
    $parts=explode('.',$host);
    $index=count($parts)-1;
    if($index>0 && in_array($parts[$index-1],explode('|',$SLDs))) $index--;
    if($index===0) $index++;
    $subdomain=implode('.',array_slice($parts,0,$index-1));
    $domain=$parts[$index-1];
    $tld=implode('.',array_slice($parts,$index));
    return array($subdomain,$domain,$tld);
}

答案 4 :(得分:0)

将字符串拆分为.个字符(无需正则表达式),然后从最后处理生成的数组。

您需要手动保存哪些SLD直接销售给最终用户的索引,因为没有简单的模式可以准确描述它们。

请注意,可能会有influx of new TLDs

答案 5 :(得分:0)

下面的代码将拆分(爆炸)'。'上的主机字符串。字符。需要一个简单的tld异常数组,我已将co.uk放入其中。只有这些例外,它才会使用主机名的最后两个块。

$h='something.co.uk';
$x=array('uk'=>'co'); // exceptions of tld's with 2 parts
$r=explode('.',$h); // split host on dot
$t=array_pop($r); // create tld
if(isset($x[$t]) and end($r)==$x[$t]) $t=array_pop($r).'.'.$t; // add to tld for the exceptions
$d=implode('.',$r); // domain
echo "sld:$d, tld:$t";

结果是sld:something,tld:co.uk

答案 6 :(得分:0)

$pos = strpos('domain.com', '.');
$length= strlen('domain.com');
$domain = substr('domain.com', 0, $pos);
$tld= substr('domain.com', $pos, $length);

答案 7 :(得分:0)

以防有人需要获取有效TLD的更新列表: http://data.iana.org/TLD/tlds-alpha-by-domain.txt