2012-02-20 14 views
36

Ho bisogno di una funzione PHP che produca un nome di dominio puro dall'URL. Quindi questa funzione deve essere rimossa http://, www e / (barra) parti dall'URL se queste parti esistono. Ecco esempi di input e output: Input ->http://www.google.com/ | Output -> google.com
Ingresso ->http://google.com/ | Output -> google.com
Ingresso -> www.google.com/ | Output -> google.com
Ingresso -> google.com | Output -> google.com
Ingresso -> google.com | Output -> google.com

Ho controllato la funzione parse_url, ma non restituisce ciò di cui ho bisogno. Dato che sono un principiante in PHP, è stato difficile per me. Se hai qualche idea, per favore rispondi.
Grazie in anticipo.Come rimuovere http: //, www e slash dall'URL in PHP?

+4

Questo è un duplicato di decine di domande. – tplaner

+0

parse_url manterrà il nome di dominio completo, inclusi i sottodomini, ad es. non gira www.google.com in google.com – Gordon

+1

La seconda risposta più votata qui (http://stackoverflow.com/questions/276516/parsing-domain-from-url-in-php) è probabilmente la scommessa più semplice . – BenOfTheNorth

risposta

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 

funziona correttamente con tutti i vostri input di esempio.

+0

e cosa succede se non è www ma secure.google.com? – Gordon

+0

Yeap, questo è quello che mi serve. Grazie mille! – JohnUS

+2

@Gordon: domanda dichiarata 'deve essere rimossa http: //, www e /'. Sottodomini arbitrari non ne facevano parte e non avrebbero funzionato comunque se ne avesse avuto bisogno. – webbiedave

2

Prova questo, rimuoverà quello che volevi (http :: //, www e slash), ma manterrà gli altri sottodomini example.google.com quali

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

e cosa succede se non è www ma secure.google.com? – Gordon

+0

L'OP ha chiesto specificamente di rimuovere http: //, www e il trailing rimosso, quindi la mia soluzione rimuove solo questi. Altre soluzioni potrebbero essere molto più complicate e probabilmente richiederebbero un database di eccezioni, i domini .uk, .tw potrebbero causare problemi. – 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]); 

Questo sarebbe tornare dominio di secondo livello, anche se sarebbe inutile per i domini .it diciamo, così si potrebbe desiderare di fare un po 'più di controllo, e comprendono parti aggiuntive se strrev ($ host [0]) è uk, au, ecc.

8

Ci sono molti modi per estrarre il dominio da un url che ho pubblicato in 4 modi qui sotto iniziando dal più breve al più lungo.

# 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'); 

Tutte le funzioni sopra restituiscono la stessa risposta: example.com

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