Preciso criar uma função que analise o domínio de uma URL.
Então com
http://google.com/dhasjkdas/sadsdds/sdda/sdads.html
ou
http://www.google.com/dhasjkdas/sadsdds/sdda/sdads.html
deveria retornar google.com
com
http://google.co.uk/dhasjkdas/sadsdds/sdda/sdads.html
deve retornar google.co.uk
.
parse_url()
retorna o host , não o domínio .parse_url
e não um vago "o que posso fazer".Respostas:
Confira
parse_url()
:parse_url
não lida muito bem com URLs muito mal confinados, mas é bom se você geralmente espera URLs decentes.fonte
parse_url
não lidar com subdomínios, mas Purl faz: github.com/jwage/purlparse_url()
possivelmente analisaria URLs com um domínio que contenha hífens incorretamente. Não foi possível encontrar a prova definitiva, mas verifique este bug .FILTER_VALIDATE_URL
usaparse_url()
internamente.print parse_url($url, PHP_URL_HOST))
se você não precisar da$parse
matriz para mais nada.Este voltaria a
google.com
tanto para http://google.com/ ... e http://www.google.com/ ...fonte
De http://us3.php.net/manual/en/function.parse-url.php#93983
fonte
host
epath
.Message: Undefined index: host
alguma idéia para corrigir isso?!empty($parseUrl['host'])
.O código que deveria funcionar 100% não pareceu cortá-lo para mim, eu fiz o patch um pouco do exemplo, mas encontrei o código que não estava ajudando e com problemas. então mudei para algumas funções (para salvar solicitando a lista do Mozilla o tempo todo e removendo o sistema de cache). Isso foi testado em um conjunto de 1000 URLs e parecia funcionar.
Então use-o como
Eu sei que deveria ter transformado isso em uma aula, mas não tive tempo.
fonte
fonte
Se você deseja extrair o host da string
http://google.com/dhasjkdas/sadsdds/sdda/sdads.html
, o uso de parse_url () é uma solução aceitável para você.Mas se você deseja extrair o domínio ou suas partes, precisará do pacote usando Public Suffix List . Sim, você pode usar as funções de seqüência de caracteres parse_url (), mas, às vezes, produz resultados incorretos.
Eu recomendo o TLDExtract para análise de domínio, aqui está um código de exemplo que mostra o diff:
fonte
Eu descobri que a solução do @ philfreo (referenciada no php.net) é muito boa para obter bons resultados, mas em alguns casos mostra a mensagem "notice" e "Strict Standards" do php. Aqui uma versão fixa deste código.
fonte
Aqui está o código que fiz que 100% encontra apenas o nome de domínio, uma vez que são necessários os sub tlds do mozilla. A única coisa que você precisa verificar é como você faz o cache desse arquivo, para não consultar o mozilla toda vez.
Por alguma estranha razão, domínios como co.uk não estão na lista, então você deve fazer alguns hackers e adicioná-los manualmente. Não é a solução mais limpa, mas espero que ajude alguém.
fonte
co.uk
não estava na lista era porque era uma lista de TLDs, não de domínios. O ccTLD mudou muito desde que esta resposta foi escrita. Notavelmente: "Novos registros diretamente sob .uk foram aceitos pela Nominet desde 10 de junho de 2014 às 08:00 BST; no entanto, há um período de reserva para clientes existentes que já possuem .co.uk, .org.uk, .me.uk , .net.uk, .ltd.uk ou .plc.uk para reivindicar o domínio .uk correspondente, que é executado até às 07:59 BST de 10 de junho de 2019. " ( Source )Você pode passar PHP_URL_HOST para a função parse_url como segundo parâmetro
fonte
fonte
Por favor, considere substituir a solução aceita pelo seguinte:
parse_url () sempre incluirá qualquer subdomínio, portanto, essa função não analisa muito bem os nomes de domínio. aqui estão alguns exemplos:
Em vez disso, você pode considerar esta solução pragmática. Ele abrangerá muitos, mas nem todos os nomes de domínio - por exemplo, domínios de nível inferior, como 'sos.state.oh.us', não são abordados.
Por fim, o Analisador de Domínio PHP de Jeremy Kendall permite analisar o nome do domínio a partir de um URL. O analisador de nome de host do URI da liga também fará o trabalho.
fonte
parse_url não funcionou para mim. Apenas retornou o caminho. Mudando para o básico usando o php5.3 +:
fonte
Eu editei para você:
Todo o tipo de URL (www.domínio.ltd, sub1.subn.domínio.ltd resultará em: domínio.ltd.
fonte
Estou adicionando esta resposta tarde, pois é a resposta que mais aparece no Google ...
Você pode usar o PHP para ...
para pegar o host, mas não o domínio privado ao qual o host se refere. (O exemplo
www.google.co.uk
é o host, masgoogle.co.uk
é o domínio privado)Para obter o domínio privado, é necessário conhecer a lista de sufixos públicos nos quais é possível registrar um domínio privado. Essa lista é organizada pela Mozilla em https://publicsuffix.org/
O código abaixo funciona quando uma matriz de sufixos públicos já foi criada. Basta ligar
com o código restante ...
fonte
Isso geralmente funcionará muito bem se o URL de entrada não for totalmente lixo eletrônico. Remove o subdomínio.
Exemplo
Entrada:
http://www2.website.com:8080/some/file/structure?some=parameters
Resultado:
website.com
fonte
Combinando as respostas de worldofjr e Alix Axel em uma pequena função que tratará da maioria dos casos de uso:
fonte
fonte
Confira parse_url ()
fonte
Basta usar como se segue ...
fonte