Necesito construir una función que analice el dominio desde una URL.
Entonces, con
http://google.com/dhasjkdas/sadsdds/sdda/sdads.html
o
http://www.google.com/dhasjkdas/sadsdds/sdda/sdads.html
debería volver google.com
con
http://google.co.uk/dhasjkdas/sadsdds/sdda/sdads.html
Debería volver google.co.uk
.
parse_url()
devuelve el host , no el dominio .parse_url
lugar de un vago "qué puedo hacer".Respuestas:
Echa un vistazo a
parse_url()
:parse_url
no maneja muy bien las URL maltratadas muy bien, pero está bien si generalmente espera URL decentes.fuente
parse_url
no maneja subdominios, pero Purl sí: github.com/jwage/purlparse_url()
posiblemente analizaría las URL con un dominio que contiene guiones incorrectamente. No se pudo encontrar una prueba definitiva, pero echa un vistazo a este error .FILTER_VALIDATE_URL
utilizaparse_url()
internamente.print parse_url($url, PHP_URL_HOST))
si no necesita la$parse
matriz para nada más.Esto devolvería
google.com
tanto para http://google.com/ ... como para http://www.google.com/ ...fuente
De http://us3.php.net/manual/en/function.parse-url.php#93983
fuente
host
ypath
.Message: Undefined index: host
alguna idea para solucionar esto?!empty($parseUrl['host'])
.El código que estaba destinado a funcionar al 100% no parecía ser suficiente para mí, parcheé un poco el ejemplo pero encontré código que no estaba ayudando y problemas con él. así que lo cambié a un par de funciones (para guardar la solicitud de la lista de Mozilla todo el tiempo y eliminar el sistema de caché). Esto se ha probado con un conjunto de 1000 URL y parece funcionar.
Entonces úsalo como
Sé que debería haber convertido esto en una clase, pero no tuve tiempo.
fuente
fuente
Si desea extraer el host de la cadena
http://google.com/dhasjkdas/sadsdds/sdda/sdads.html
, el uso de parse_url () es una solución aceptable para usted.Pero si desea extraer el dominio o sus partes, necesita un paquete que use la Lista de sufijos públicos . Sí, puede usar funciones de cadena alrededor de parse_url (), pero a veces producirá resultados incorrectos.
Recomiendo TLDExtract para el análisis de dominios, aquí hay un código de muestra que muestra diff:
fuente
Descubrí que la solución de @ philfreo (referenciada desde php.net) es bastante buena para obtener buenos resultados, pero en algunos casos muestra el mensaje de "aviso" y "Normas estrictas" de php. Aquí una versión fija de este código.
fuente
Aquí está el código que hice que 100% encuentra solo el nombre de dominio, ya que toma subtlds de mozilla para tener en cuenta. Lo único que tiene que verificar es cómo hacer caché de ese archivo, por lo que no consulta mozilla cada vez.
Por alguna extraña razón, los dominios como co.uk no están en la lista, por lo que debe realizar algún pirateo y agregarlos manualmente. No es la solución más limpia, pero espero que ayude a alguien.
fuente
co.uk
no estaba en la lista, fue porque era una lista de TLD, no de dominios. El ccTLD ha cambiado mucho desde que se escribió esta respuesta. Notablemente: "Nominet ha aceptado nuevos registros directamente bajo .uk desde el 10 de junio de 2014 a las 08:00 BST, sin embargo, hay un período de reserva para los clientes existentes que ya tienen un .co.uk, .org.uk, .me.uk , .net.uk, .ltd.uk o .plc.uk para reclamar el dominio .uk correspondiente, que se ejecuta hasta las 07:59 BST del 10 de junio de 2019 ". ( Fuente )Puede pasar PHP_URL_HOST a la función parse_url como segundo parámetro
fuente
fuente
Considere reemplazar la solución aceptada con lo siguiente:
parse_url () siempre incluirá cualquier subdominio (s), por lo que esta función no analiza muy bien los nombres de dominio. Aquí hay unos ejemplos:
En cambio, puede considerar esta solución pragmática. Cubrirá muchos, pero no todos los nombres de dominio; por ejemplo, los dominios de nivel inferior como 'sos.state.oh.us' no están cubiertos.
Finalmente, el analizador de dominios PHP de Jeremy Kendall le permite analizar el nombre de dominio desde una url. League URI Hostname Parser también hará el trabajo.
fuente
parse_url no funcionó para mí. Solo devolvió el camino. Pasando a lo básico usando php5.3 +:
fuente
He editado para ti:
Todos los tipos de URL (www.domain.ltd, sub1.subn.domain.ltd darán como resultado: domain.ltd.
fuente
Estoy agregando esta respuesta tarde ya que esta es la respuesta que más aparece en Google ...
Puedes usar PHP para ...
para agarrar el host pero no el dominio privado al que se refiere el host. (Ejemplo
www.google.co.uk
es el host, perogoogle.co.uk
es el dominio privado)Para obtener el dominio privado, debe conocer la lista de sufijos públicos en los que se puede registrar un dominio privado. Esta lista está curada por Mozilla en https://publicsuffix.org/
El siguiente código funciona cuando ya se ha creado una matriz de sufijos públicos. Simplemente llame
con el código restante ...
fuente
Esto generalmente funcionará muy bien si la URL de entrada no es basura total. Elimina el subdominio.
Ejemplo
Entrada:
http://www2.website.com:8080/some/file/structure?some=parameters
Salida:
website.com
fuente
Combinando las respuestas de worldofjr y Alix Axel en una pequeña función que manejará la mayoría de los casos de uso:
fuente
fuente
Echa un vistazo a parse_url ()
fuente
Solo úsalo como sigue ...
fuente