2010-08-09 38 views
19

Lo que quieroPHP: Obtener el dominio de la URL


quiero obtener de una parte URLdomain por lo que desde http://example.com/ ->example.com

Ejemplos:


+----------------------------------------------+-----------------------+ 
| input          | output    | 
+----------------------------------------------+-----------------------+ 
| http://www.stackoverflow.com/questions/ask | www.stackoverflow.com | 
| http://validator.w3.org/check    | validator.w3.org  | 
| http://www.google.com/?q=hello    | www.google.com  | 
| http://google.de/?q=hello     | google.de    | 
+----------------------------------------------+-----------------------+ 

Encontré algunas preguntas relacionadas en stackoverflow pero ninguna de ellas era exactamente lo que estaba buscando.

¡Gracias por cualquier ayuda!

+0

Este código le ayudará a obtener el nombre de dominio completo: https://gist.github.com/praisedpk/64bdb80d28144aa78d58469324432277 –

Respuesta

69

No es necesario utilizar una expresión regular para esto. PHP tiene una función incorporada para hacer esto. Utilice parse_url():

$domain = parse_url($url, PHP_URL_HOST); 
+1

Hiciste un hombre mágico. Dio una gran solución. –

+1

es bueno solo si contiene http (s), no para "stackoverflow.com/questions" – ewwink

+1

esto también le dará subdominios. Tenga cuidado porque 'parse_url ('http://example.com', PHP_URL_HOST) == parse_url ('http://www.example.com', PHP_URL_HOST)' devolverá falso –

0

Aquí está mi solución rápida y sucia.

http://([^/]+).*

Yo no lo he probado, pero debe tomar nada entre el http:// y la primera barra.

+1

¿Qué pasa con los dominios con http: // www. – User

1

Supone que http:// lo prefija todo.

$tmp = explode("/", $url); 
$domain = $tmp[2]; 
+0

heh, la solución más lista para usar :-) – gnud

0
if (preg_match('/http:\/\/([^\/]+)\//i', $target_string, $matches)) { 
    $domain = $matches[1]; 
} 
1
$tmp = parse_url($url); 
$url = $tmp['host'] 
1

Esto es como el regex from theraccoonbear pero con soporte para dominios HTTPS.

if (preg_match('/https?:\/\/([^\/]+)\//i', $target_string, $matches)) { 
    $domain = $matches[1]; 
} 
0

mejor forma en que pienso:

preg_match('/(http(|s)):\/\/(.*?)\//si', 'http://www.example.com/page/?bla=123#[email protected]#$%^&*()_+', $output); 
// $output[0] ------------> https://www.example.com/ 
2

que utilizo:

$domain = parse_url('http://' . str_replace(array('https://', 'http://'), '', $url), PHP_URL_HOST); 

Debido parse_url no vuelve clave de host cuando el esquema no se encuentra en $url.

Cuestiones relacionadas