19 Stimmen

Wie erhält man den Basis-Domainnamen aus einer URL mit PHP?

Ich muss den Domänennamen aus einer URL abrufen. Die folgenden Beispiele sollten alle zurückgeben google.com :

google.com
images.google.com
new.images.google.com
www.google.com

In ähnlicher Weise sollten die folgenden URLs alle Folgendes zurückgeben google.co.uk .

google.co.uk
images.google.co.uk
new.images.google.co.uk
http://www.google.co.uk

Ich zögere bei der Verwendung von regulären Ausdrücken, weil etwas wie domain.com/google.com könnte falsche Ergebnisse liefern.

Wie kann ich die Top-Level-Domain mit PHP abrufen? Dies muss auf allen Plattformen und Hosts funktionieren.

0voto

Jasen Punkte 11007

Sollten Sie wahrscheinlich die öffentliche Suffixliste verwenden.

https://publicsuffix.org/

in php kann man das mit den regdom libs machen:

https://github.com/usrflo/registered-domain-libs/

0voto

Skeets Punkte 3701

Keine der Antworten hier unterstützt öffentliche Suffixe mit 3 Teilen, die ebenfalls existieren (z.B., .k12.ak.us )

Hier ist eine vollständigere Lösung, die eine beliebige Länge des öffentlichen Suffixes zulässt:

public function getBaseDomain($domain)
    {
        if (empty($domain) || substr_count($domain, ".") < 2) {
            return $domain;
        }
        $publicSuffixes = [".com",".co.uk",".k12.ak.us", ......];
        $domainParts = explode(".", $domain);
        $checkDomain = array_pop($domainParts);

        do {
            $checkDomain = array_pop($domainParts) . "." . $checkDomain;
            if (empty($domainParts)) {
                break;
            }
        } while (array_search("." . $checkDomain, $publicSuffixes) !== false);

        return $checkDomain;
    }

Hinweis: Der Code hier geht bereits davon aus, dass es sich um eine Domäne und nicht um eine IP handelt, und nimmt an, dass es sich um eine gültige Domäne handelt, ohne den https:// .

Die vollständigste Liste der verfügbaren öffentlichen Suffixe finden Sie unter https://publicsuffix.org/list/public_suffix_list.dat

-3voto

Widyo Rio Punkte 1

Verwenden Sie diese Funktion:

function getHost($url){
    if (strpos($url,"http://")){
        $httpurl=$url;
    } else {
        $httpurl="http://".$url;
    }
    $parse = parse_url($httpurl);
    $domain=$parse['host'];

    $portion=explode(".",$domain);
    $count=sizeof($portion)-1;
    if ($count>1){
        $result=$portion[$count-1].".".$portion[$count];
    } else {
        $result=$domain;
    }
    return $result;
}

Beantworten Sie alle Varianten der Beispiel-URLs.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X