Muszę zbudować funkcję, która analizuje domenę z adresu URL.
Więc z
http://google.com/dhasjkdas/sadsdds/sdda/sdads.html
lub
http://www.google.com/dhasjkdas/sadsdds/sdda/sdads.html
powinien wrócić google.com
z
http://google.co.uk/dhasjkdas/sadsdds/sdda/sdads.html
powinien powrócić google.co.uk
.
parse_url()
zwraca hosta , a nie domenę .parse_url
raczej tego ograniczenia niż niejasnego „co mogę zrobić”.Odpowiedzi:
Sprawdź
parse_url()
:parse_url
nie radzi sobie zbyt dobrze z bardzo źle zniekształconymi adresami URL, ale jest w porządku, jeśli generalnie oczekujesz przyzwoitych adresów URL.źródło
parse_url
nie obsługuje subdomen, ale Purl tak: github.com/jwage/purlparse_url()
prawdopodobnie przeanalizowałby adresy URL z domeną zawierającą myślniki. Nie udało się znaleźć konkretnego dowodu, ale sprawdź ten błąd .FILTER_VALIDATE_URL
używaparse_url()
wewnętrznie.print parse_url($url, PHP_URL_HOST))
jeśli nie potrzebujesz$parse
tablicy do niczego innego.Spowoduje to zwrócenie
google.com
zarówno adresu http://google.com/ ..., jak i http://www.google.com/ ...źródło
Z http://us3.php.net/manual/en/function.parse-url.php#93983
źródło
host
ipath
.Message: Undefined index: host
jakieś pomysły, jak to naprawić?!empty($parseUrl['host'])
.Kod, który miał działać w 100%, nie wydawał mi się wystarczający, poprawiłem trochę przykład, ale znalazłem kod, który nie pomagał i problemy z nim. więc zmieniłem to na kilka funkcji (aby oszczędzić ciągłe proszenie o listę z Mozilli i usuwanie systemu pamięci podręcznej). Zostało to przetestowane na zestawie 1000 adresów URL i wydaje się, że działa.
Następnie użyj tego jak
Wiem, że powinienem był przekształcić to w zajęcia, ale nie miałem czasu.
źródło
źródło
Jeśli chcesz wyodrębnić hosta ze stringa
http://google.com/dhasjkdas/sadsdds/sdda/sdads.html
, użycie parse_url () jest dla Ciebie akceptowalnym rozwiązaniem.Ale jeśli chcesz wyodrębnić domenę lub jej części, potrzebujesz pakietu używającego listy sufiksów publicznych . Tak, możesz używać funkcji tekstowych wokół parse_url (), ale czasami da to nieprawidłowe wyniki.
Polecam TLDExtract do analizowania domeny, oto przykładowy kod, który pokazuje różnice:
źródło
Zauważyłem, że rozwiązanie @ philfreo (do którego odwołuje się php.net) daje dobre wyniki, ale w niektórych przypadkach wyświetla "zawiadomienie" i komunikat "Ścisłe standardy" php. Tutaj poprawiona wersja tego kodu.
źródło
Oto kod, który stworzyłem, że 100% znajduje tylko nazwę domeny, ponieważ bierze pod uwagę mozilla sub tlds. Jedyną rzeczą, którą musisz sprawdzić, jest to, jak tworzysz pamięć podręczną tego pliku, więc nie pytaj za każdym razem do Mozilli.
Z jakiegoś dziwnego powodu domen takich jak co.uk nie ma na liście, więc musisz trochę zhakować i dodać je ręcznie. Nie jest to najczystsze rozwiązanie, ale mam nadzieję, że komuś pomoże.
źródło
co.uk
nie było na liście, było to, że była to lista TLD, a nie domen. Od czasu napisania tej odpowiedzi ccTLD bardzo się zmieniło. W szczególności: „Nowe rejestracje bezpośrednio w domenie .uk są akceptowane przez Nominet od 10 czerwca 2014 r. Od godziny 08:00 czasu BST, jednak istnieje okres rezerwacji dla obecnych klientów, którzy mają już domeny .co.uk, .org.uk, .me.uk , .net.uk, .ltd.uk lub .plc.uk w celu przejęcia odpowiedniej domeny .uk, która będzie działać do godziny 07:59 czasu BST 10 czerwca 2019 r . ” ( Źródło )Możesz przekazać PHP_URL_HOST do funkcji parse_url jako drugi parametr
źródło
źródło
Rozważ zastąpienie zaakceptowanego rozwiązania następującym:
parse_url () zawsze będzie zawierał dowolne subdomeny, więc ta funkcja nie analizuje dobrze nazw domen. Oto kilka przykładów:
Zamiast tego możesz rozważyć to pragmatyczne rozwiązanie. Obejmuje wiele, ale nie wszystkie nazwy domen - na przykład domeny niższego poziomu, takie jak „sos.state.oh.us”, nie są objęte.
Wreszcie, Parser domeny PHP Jeremy'ego Kendalla umożliwia przeanalizowanie nazwy domeny z adresu URL. Parser nazwy hosta URI ligi również wykona zadanie.
źródło
parse_url nie działa dla mnie. To tylko zwróciło ścieżkę. Przejście do podstaw przy użyciu php5.3 +:
źródło
Zredagowałem dla Ciebie:
Wszystkie typy adresów URL (www.domain.ltd, sub1.subn.domain.ltd spowodują: domain.ltd.
źródło
Dodaję tę odpowiedź późno, ponieważ jest to odpowiedź, która pojawia się najczęściej w Google ...
Możesz użyć PHP, aby ...
aby przejąć hosta, ale nie domenę prywatną, do której odnosi się host. (Przykład:
www.google.co.uk
host, alegoogle.co.uk
jest to domena prywatna)Aby przejąć domenę prywatną, musisz znać listę publicznych sufiksów, do których można zarejestrować domenę prywatną. Ta lista jest tworzona przez Mozillę pod adresem https://publicsuffix.org/
Poniższy kod działa, gdy tablica publicznych sufiksów została już utworzona. Po prostu zadzwoń
z pozostałym kodem ...
źródło
Zwykle działa to bardzo dobrze, jeśli wejściowy adres URL nie jest całkowitym śmieciami. Usuwa subdomenę.
Przykład
Wejście:
http://www2.website.com:8080/some/file/structure?some=parameters
Wynik:
website.com
źródło
Połączenie odpowiedzi worldofjr i Alix Axel w jedną małą funkcję, która będzie obsługiwać większość przypadków użycia:
źródło
źródło
Sprawdź parse_url ()
źródło
Po prostu użyj jak po ...
źródło