php - saber - Extrae el dominio registrado de la URL según la lista de sufijos públicos
whois dominio (3)
Esta pregunta es un poco antigua, pero hay una nueva solución: https://github.com/jeremykendall/php-domain-parser
Esta biblioteca hace exactamente lo que quieres. Aquí está la configuración:
$pslManager = new Pdp/PublicSuffixListManager();
$parser = new Pdp/Parser($pslManager->getList());
echo $parser->getRegisterableDomain(''www.scottwills.co.uk'');
Esto imprimirá "scottwills.co.uk"
.
Dada una URL, ¿cómo extraigo el dominio registrado usando la Lista de sufijos públicos (lista de TLD efectivos, por ejemplo, esta lista )?
Por ejemplo, considerando a.bg
es un sufijo público válido:
http://www.test.start.a.bg/hello.html -> start.a.bg
http://test.start.a.bg/ -> start.a.bg
http://test.start.abc.bg/ -> abc.bg (.bg is the public suffix)
Esto no se puede hacer utilizando la manipulación simple de cadenas porque el sufijo público puede constar de múltiples niveles dependiendo del TLD.
PD: No importa cómo lea la lista (base de datos o archivo sin formato), pero la lista debe ser accesible localmente, así que no siempre dependo de los servicios externos.
Puede usar parse_url()
para extraer el nombre de host, luego use la biblioteca proporcionada por regdom para determinar el nombre de dominio registrado (dn + eTLD). Por ejemplo:
require_once("effectiveTLDs.inc.php");
require_once("regDomain.inc.php");
$url = ''http://www.metu.edu.tr/dhasjkdas/sadsdds/sdda/sdads.html'';
echo getRegisteredDomain(parse_url($url, PHP_URL_HOST));
Eso se imprimirá metu.edu.tr
Otros ejemplos que he probado:
http://www.xyz.start.bg/hello -> start.bg
http://www.start.a.bg/world -> start.a.bg (a.bg is a listed eTLD)
http://xyz.ma219.metu.edu.tr -> metu.edu.tr
http://www.google.com/search -> google.com
http://google.co.uk/search?asd -> google.co.uk
ACTUALIZACIÓN: estas bibliotecas se han movido a: https://github.com/leth/registered-domains-php
Recomiendo usar TLDExtract , tiene una base de datos actualizable generada a partir de PSL .
$extract = new LayerShifter/TLDExtract/Extract();
$result = $extract->parse(''shop.github.com'');
$result->getFullHost(); // will return (string) ''shop.github.com''
$result->getRegistrableDomain(); // will return (string) ''github.com''
$result->isValidDomain(); // will return (bool) true
$result->isIp(); // will return (bool) false