Ich muss eine Funktion erstellen, die die Domain von einer URL analysiert.
Also mit
http://google.com/dhasjkdas/sadsdds/sdda/sdads.html
oder
http://www.google.com/dhasjkdas/sadsdds/sdda/sdads.html
es sollte zurückkehren google.com
mit
http://google.co.uk/dhasjkdas/sadsdds/sdda/sdads.html
es sollte zurückkehren google.co.uk
.
parse_url()
den Host zurück , nicht die Domain .parse_url
als auf ein vages "Was kann ich tun" zu beziehen .Antworten:
Check out
parse_url()
:parse_url
geht nicht wirklich gut mit schlecht verstümmelten URLs um, ist aber in Ordnung, wenn Sie im Allgemeinen anständige URLs erwarten.quelle
parse_url
Behandle keine Subdomains, aber Purl: github.com/jwage/purlparse_url()
würde möglicherweise URLs mit einer Domain analysieren, die Striche falsch enthält. Konnte keinen eindeutigen Beweis finden, aber sehen Sie sich diesen Fehler an .FILTER_VALIDATE_URL
verwendetparse_url()
intern.print parse_url($url, PHP_URL_HOST))
Wenn Sie das$parse
Array für nichts anderes benötigen .Dies würde
google.com
sowohl für http://google.com/ ... als auch für http://www.google.com/ ... zurückgeben.quelle
Von http://us3.php.net/manual/en/function.parse-url.php#93983
quelle
host
und zu zitierenpath
.Message: Undefined index: host
Ideen, um dies zu beheben?!empty($parseUrl['host'])
.Der Code, der zu 100% funktionieren sollte, schien es für mich nicht zu schneiden. Ich habe das Beispiel ein wenig gepatcht, aber Code gefunden, der nicht half und Probleme damit hatte. Deshalb habe ich es in ein paar Funktionen geändert (um zu sparen, dass ich ständig nach der Liste von Mozilla frage und das Cache-System entferne). Dies wurde gegen einen Satz von 1000 URLs getestet und schien zu funktionieren.
Dann benutze es wie
Ich weiß, ich hätte daraus eine Klasse machen sollen, hatte aber keine Zeit.
quelle
quelle
Wenn Sie einen Host aus einem String extrahieren möchten
http://google.com/dhasjkdas/sadsdds/sdda/sdads.html
, ist die Verwendung von parse_url () für Sie eine akzeptable Lösung.Wenn Sie jedoch die Domäne oder ihre Teile extrahieren möchten, benötigen Sie ein Paket, das die öffentliche Suffixliste verwendet . Ja, Sie können Zeichenfolgenfunktionen um parse_url () verwenden, aber manchmal werden falsche Ergebnisse erzielt.
Ich empfehle TLDExtract für das Domain-Parsing. Hier ist ein Beispielcode, der diff zeigt:
quelle
Ich habe festgestellt, dass die Lösung von @ philfreo (von php.net referenziert) ziemlich gut ist, um ein gutes Ergebnis zu erzielen, aber in einigen Fällen zeigt sie die Meldung "Notice" und "Strict Standards" von php. Hier eine feste Version dieses Codes.
quelle
Hier ist der Code, den ich gemacht habe, dass 100% nur den Domainnamen findet, da Mozilla-Subtlds berücksichtigt werden. Sie müssen nur überprüfen, wie Sie den Cache dieser Datei erstellen, damit Sie Mozilla nicht jedes Mal abfragen.
Aus irgendeinem seltsamen Grund sind Domains wie co.uk nicht in der Liste enthalten, daher müssen Sie einige Hacking-Aktionen durchführen und sie manuell hinzufügen. Es ist nicht die sauberste Lösung, aber ich hoffe, es hilft jemandem.
quelle
co.uk
nicht auf der Liste stand, war, dass es sich um eine Liste von TLDs handelte, nicht um Domains. Die ccTLD hat sich seit dem Schreiben dieser Antwort stark verändert. Insbesondere: "Neuanmeldungen direkt unter .uk wurden von Nominet seit dem 10. Juni 2014 um 08:00 Uhr MEZ akzeptiert. Es besteht jedoch eine Reservierungsfrist für bestehende Kunden, die bereits eine .co.uk, .org.uk, .me.uk haben , .net.uk, .ltd.uk oder .plc.uk Domain, um die entsprechende .uk Domain zu beanspruchen, die bis 07:59 BST am 10. Juni 2019 läuft . " ( Quelle )Sie können PHP_URL_HOST als zweiten Parameter an die Funktion parse_url übergeben
quelle
quelle
Bitte ersetzen Sie die akzeptierte Lösung durch Folgendes:
parse_url () enthält immer alle Subdomains, daher analysiert diese Funktion Domainnamen nicht sehr gut. Hier sind einige Beispiele:
Stattdessen können Sie diese pragmatische Lösung in Betracht ziehen. Es werden viele, aber nicht alle Domainnamen abgedeckt. Beispielsweise werden untergeordnete Domains wie 'sos.state.oh.us' nicht behandelt.
Mit dem PHP Domain Parser von Jeremy Kendall können Sie den Domainnamen anhand einer URL analysieren. League URI Hostname Parser erledigt ebenfalls die Aufgabe.
quelle
parse_url hat bei mir nicht funktioniert. Es gab nur den Pfad zurück. Mit php5.3 + zu den Grundlagen wechseln:
quelle
Ich habe für Sie bearbeitet:
Alle Typ-URLs (www.domain.ltd, sub1.subn.domain.ltd) ergeben: domain.ltd.
quelle
Ich füge diese Antwort spät hinzu, da dies die Antwort ist, die bei Google am häufigsten auftaucht ...
Sie können PHP verwenden, um ...
um den Host zu greifen, aber nicht die private Domain, auf die sich der Host bezieht. (Beispiel
www.google.co.uk
ist der Host, abergoogle.co.uk
die private Domain)Um die private Domain zu erhalten, müssen Sie die Liste der öffentlichen Suffixe kennen, für die eine private Domain registriert werden kann . Diese Liste wird zufällig von Mozilla unter https://publicsuffix.org/ kuratiert.
Der folgende Code funktioniert, wenn bereits ein Array öffentlicher Suffixe erstellt wurde. Einfach anrufen
mit dem restlichen Code ...
quelle
Dies funktioniert im Allgemeinen sehr gut, wenn die Eingabe-URL nicht Junk ist. Es entfernt die Subdomain.
Beispiel
Eingang:
http://www2.website.com:8080/some/file/structure?some=parameters
Ausgabe:
website.com
quelle
Kombinieren Sie die Antworten von worldofjr und Alix Axel zu einer kleinen Funktion, die die meisten Anwendungsfälle behandelt:
quelle
quelle
Schauen Sie sich parse_url () an
quelle
Verwenden Sie einfach wie folgt ...
quelle