在php中返回带有句点的顶级域名

时间:2013-09-06 17:21:56

标签: php dns return

基本上我遇到的问题是我需要编写这个函数,可以使用像www.stackoverflow.com这样的URL并返回“com”。但是我需要能够返回相同的值,即使URL在末尾有一段时间,如“www.stackoverflow.com”。 这就是我到目前为止所拥有的。 if语句是我尝试在句点之前返回数组中的点,但我不认为我正在使用if语句。否则代码的其余部分完全应该做的事情。

<?php
    function getTLD($domain)
    {

    $domainArray = explode("." , $domain);
    $topDomain = end($domainArray);
       if ($topDomain == " ")
       $changedDomain = prev(end($domainArray));
       return $changedDomain;

    return $topDomain;


    }
?>

3 个答案:

答案 0 :(得分:1)

对于像这样的简单案例,不要使用正则表达式,它是昂贵且难以理解的。只需删除最后一个点(如果存在):

function getTLD($domain) {
    $domain = rtrim($domain, '.');
    return end(explode('.', $domain));
}

答案 1 :(得分:0)

使用正则表达式来做这样的事情。试试这个:

function getTLD($domain) {
    return preg_replace("/.*\.([a-z]+)\.?$/i", "$1", $domain );
}

一个实例:http://codepad.org/km0vCkLz

详细了解正则表达式以及如何使用它们:http://www.regular-expressions.info/

答案 2 :(得分:0)

end函数返回一个空字符串""(没有任何空格)。您正在将$topDomain与单个空格字符进行比较,因此if未评估为true。

同样prev函数需要数组输入,end($domainArray)返回一个字符串,因此,$changedDomain = prev(end($domainArray))应该抛出E_WARNING

由于end更新了数组$domainArray的内部指针,该指针在您调用$topDomain = end($domainArray)时已更新,因此您无需在{{1}上调用end$domainArray块内。

尝试:

if

以下是phpfiddle