2012-02-20 23 views
36

Necesito una función php que produzca un nombre de dominio puro desde la URL. Por lo tanto, esta función debe eliminar http://, www y / (barras) partes de la URL si existen estas partes. Aquí hay ejemplos de entradas y salidas: Entrada ->http://www.google.com/ | Salida -> google.com
Entrada ->http://google.com/ | Salida -> google.com
Entrada -> www.google.com/ | Salida -> google.com
Entrada -> google.com/ | Salida -> google.com
Entrada -> google.com | Salida -> google.com

Comprobé parse_url función, pero no devuelve lo que necesito. Desde que soy principiante en PHP, fue difícil para mí. Si tienes alguna idea, por favor responde.
Gracias por adelantado.¿Cómo eliminar http: //, www y slash de URL en PHP?

+4

Este es un duplicado de docenas de preguntas. – tplaner

+0

parse_url mantendrá el nombre de dominio completo, incluidos los subdominios, p. no convierte www.google.com en solo google.com – Gordon

+1

La segunda respuesta más valorada aquí (http://stackoverflow.com/questions/276516/parsing-domain-from-url-in-php) es probablemente la apuesta más simple . – BenOfTheNorth

Respuesta

57
$input = 'www.google.co.uk/'; 

// in case scheme relative URI is passed, e.g., //www.google.com/ 
$input = trim($input, '/'); 

// If scheme not included, prepend it 
if (!preg_match('#^http(s)?://#', $input)) { 
    $input = 'http://' . $input; 
} 

$urlParts = parse_url($input); 

// remove www 
$domain = preg_replace('/^www\./', '', $urlParts['host']); 

echo $domain; 

// output: google.co.uk 

Funciona correctamente con todas sus entradas de ejemplo.

+0

y ¿qué pasa si no es www sino secure.google.com? – Gordon

+0

Yeap, eso es lo que necesito. ¡Muchas gracias! – JohnUS

+2

@Gordon: Pregunta establecida 'debe eliminarse http: //, www y /'. Los subdominios arbitrarios no formaban parte de él y tampoco funcionarían si lo necesitara. – webbiedave

2

Prueba de esto, se eliminará lo que quería (http :: // www y la barra final) pero conservará otros subdominios como example.google.com

$host = parse_url('http://www.google.com', PHP_URL_HOST); 
$host = preg_replace('/^(www\.)/i', '', $host); 
+0

y ¿qué pasa si no es www sino secure.google.com? – Gordon

+0

El OP pidió específicamente que se eliminen http: //, www y el seguimiento reducido, por lo tanto, mi solución solo los elimina. Otras soluciones podrían ser mucho más complicadas y probablemente necesitarían una base de datos de excepciones, .uk, .tw dominios causarían problemas. – h00ligan

3
if (!preg_match('/^http(s)?:\/\//', $url)) 
    $url = 'http://' . $url; 

$host = parse_url($url, PHP_URL_HOST); 
$host = explode('.', strrev($host)); 
$host = strrev($host[1]) . '.' strrev($host[0]); 

Esto volvería dominio de segundo nivel, a pesar de que sería inútil para los dominios .es digamos, por lo que es posible que desee hacer más cheques, e incluyen partes adicionales si strrev ($ host [0]) es Reino Unido, au, etc.

8

Hay muchas maneras de tomar el dominio de una url. He publicado 4 formas a continuación, comenzando desde la más corta hasta la más larga.

# 1

function urlToDomain($url) { 
    return implode(array_slice(explode('/', preg_replace('/https?:\/\/(www\.)?/', '', $url)), 0, 1)); 
} 
echo urlToDomain('http://www.example.com/directory/index.php?query=true'); 

# 2

function urlToDomain($url) { 
    $domain = explode('/', preg_replace('/https?:\/\/(www\.)?/', '', $url)); 
    return $domain['0']; 
} 
echo urlToDomain('http://www.example.com/directory/index.php?query=true'); 

# 3

function urlToDomain($url) { 
    $domain = preg_replace('/https?:\/\/(www\.)?/', '', $url); 
    if (strpos($domain, '/') !== false) { 
     $explode = explode('/', $domain); 
     $domain = $explode['0']; 
    } 
    return $domain; 
} 
echo urlToDomain('http://www.example.com/directory/index.php?query=true'); 

# 4

function urlToDomain($url) { 
    if (substr($url, 0, 8) == 'https://') { 
     $url = substr($url, 8); 
    } 
    if (substr($url, 0, 7) == 'http://') { 
     $url = substr($url, 7); 
    } 
    if (substr($url, 0, 4) == 'www.') { 
     $url = substr($url, 4); 
    } 
    if (strpos($url, '/') !== false) { 
     $explode = explode('/', $url); 
     $url  = $explode['0']; 
    } 
    return $url; 
} 
echo urlToDomain('http://www.example.com/directory/index.php?query=true'); 

Todas las funciones anteriormente devolver la misma respuesta: example.com

23
$str = 'http://www.google.com/'; 
$str = preg_replace('#^https?://#', '', rtrim($str,'/')); 
echo $str; // www.google.com 
Cuestiones relacionadas