it-swarm.com.de

Wie entfernen Sie den Domainnamen aus einer URL in PHP?

Ich suche nach einer Methode (oder Funktion), um den domain.ext-Teil jeder URL zu entfernen, die in die Funktion eingegeben wird. Die Domain-Endung kann alles sein (.com, .co.uk, .nl, .was), und die URL, die in die Domain eingespeist wird, kann alles von http://www.domain.com bis www.domain sein .com/path/script.php? = Wie auch immer

Was ist der beste Weg, dies zu tun?

42
user15063

parse_url wandelt eine URL in ein assoziatives Array um:

php > $foo = "http://www.example.com/foo/bar?hat=bowler&accessory=cane";
php > $blah = parse_url($foo);
php > print_r($blah);
Array
(
    [scheme] => http
    [Host] => www.example.com
    [path] => /foo/bar
    [query] => hat=bowler&accessory=cane
)
86
Robert Elwell

Sie können parse_url () verwenden, um dies zu tun:

$url = 'http://www.example.com';
$domain = parse_url($url, PHP_URL_Host);
$domain = str_replace('www.','',$domain);

In diesem Beispiel sollte $ domain example.com enthalten, unabhängig davon, ob www vorhanden ist oder nicht. Es funktioniert auch für eine Domain wie .co.uk

11
DavidM

Sie können auch einen regulären Ausdruck schreiben, um genau das zu erhalten, was Sie möchten.

Hier ist mein Versuch:

$pattern = '/\w+\..{2,3}(?:\..{2,3})?(?:$|(?=\/))/i';
$url = 'http://www.example.com/foo/bar?hat=bowler&accessory=cane';
if (preg_match($pattern, $url, $matches) === 1) {
    echo $matches[0];
}

Die Ausgabe ist:

example.com

Dieses Muster berücksichtigt auch Domänen wie 'example.com.au'.

Hinweis: Ich habe den entsprechenden RFC nicht konsultiert.

10
firstresponder

Hier sind ein paar einfache Funktionen, um die Stammdomäne (example.com) von einer normalen oder einer langen Domäne (test_domain.com) oder einer URL (http://www.example.com) zu erhalten.

/**
 * Get root domain from full domain
 * @param string $domain
 */
public function getRootDomain($domain)
{
    $domain = explode('.', $domain);

    $tld = array_pop($domain);
    $name = array_pop($domain);

    $domain = "$name.$tld";

    return $domain;
}

/**
 * Get domain name from url
 * @param string $url
 */
public function getDomainFromUrl($url)
{
    $domain = parse_url($url, PHP_URL_Host);
    $domain = $this->getRootDomain($domain);

    return $domain;
}
2
Mark Shust

Gelöst das ... 

Angenommen, wir rufen dev.mysite.com an und möchten 'mysite.com' extrahieren.

$requestedServerName = $_SERVER['SERVER_NAME']; // = dev.mysite.com

$thisSite = explode('.', $requestedServerName); // site name now an array

array_shift($thisSite); //chop off the first array entry eg 'dev'

$thisSite = join('.', $thisSite); //join it back together with dots ;)

echo $thisSite; //outputs 'mysite.com'

Funktioniert auch mit mysite.co.uk, sollte also überall funktionieren :)

1
z3ro

Ich habe einige Zeit darüber nachgedacht, ob es sinnvoll ist, dafür einen regulären Ausdruck zu verwenden, aber am Ende glaube ich nicht. 

der Erstverantwortliche regexp konnte mich fast überzeugen, dass dies der beste Weg war, aber es funktionierte nicht bei irgendetwas, dem ein abschließender Schrägstrich fehlte (so http://example.com zum Beispiel). Ich habe das mit dem folgenden Problem behoben: '/\w+\..{2,3}(?:\..{2,3})?(?=[\/\W])/i', aber dann wurde mir klar, dass zwei Treffer für URLs wie ' http://example.com/index.htm ' gefunden werden. Hoppla. Das wäre nicht so schlimm (verwenden Sie einfach die erste), aber es passt auch zweimal auf etwas wie: ' http://abc.ed.fg.hij.kl.mn/ ' und die Das erste Spiel ist nicht das richtige. :(

Ein Kollege schlug vor, einfach den Host zu bekommen (über parse_url()) und dann nur die letzten zwei oder drei Array-Bits zu nehmen (split() auf '.'). Die zwei oder drei würden auf einer Liste von Domänen basieren, wie 'co.uk' usw. Die Erstellung dieser Liste wird zum harten Teil.

0
livingtech

Es gibt nur eine korrekte Methode zum Extrahieren von Domänenteilen, die Verwendung von Public Suffix List (Datenbank der TLDs). Ich empfehle TLDExtract package, hier ist Beispielcode:

$extract = new LayerShifter\TLDExtract\Extract();

$result = $extract->parse('www.domain.com/path/script.php?=whatever');
$result->getSubdomain(); // will return (string) 'www'
$result->getHostname(); // will return (string) 'domain'
$result->getSuffix(); // will return (string) 'com'
0