PHP: Get Domain Name from URL

function getDomainName(string $url): string|bool {
    if (empty($url) || !filter_var($url, FILTER_VALIDATE_URL)) {
        return false;
    }
    
    $host = parse_url($url, PHP_URL_HOST);
    $parts = explode('.', $host);
    $count = count($parts);
    
    if ($count > 2) {
        $tld = $parts[$count - 1]; // eg: "uk" or "com"
        $sld = $parts[$count - 2]; // eg: "co" or "example"
        
        // top-level domain is 2 letters (eg: uk, au, br, za) AND second-level domain is 2-3 letters (eg: co, com, org, net, edu)
        if (strlen($tld) === 2 && (strlen($sld) === 2 || strlen($sld) === 3)) {
            // Multi-part extension: Grab 3 parts (eg: domain.co.uk)
            $domain = ($count >= 3) ? $parts[$count - 3] . '.' . $sld . '.' . $tld : $host;
        } else {
            // Standard extension: Grab 2 parts (eg: domain.com)
            $domain = $sld . '.' . $tld;
        }
    } else {
        // Host already 2 parts (eg: domain.com or domain.co)
        $domain = $host;
    }
    
    return $domain;
}

Leave a Reply

Your email address will not be published. Required fields are marked *