web-dev-qa-db-fra.com

Comment supprimer http: //, www et slash de l'URL en PHP?

J'ai besoin d'une fonction php qui produit un nom de domaine pur à partir de l'URL. Cette fonction doit donc être supprimée http://, www et / (barre oblique) des parties de l'URL si ces parties existent. Voici des exemples d'entrées et de sorties: Input -> http://www.google.com/ | Sortie -> google.com
Entrée -> http://google.com/ | Sortie -> google.com
Entrée -> www.google.com/ | Sortie -> google.com
Entrée -> google.com/ | Sortie -> google.com
Entrée -> google.com | Sortie -> google.com

J'ai vérifié parse_url fonction, mais ne renvoie pas ce dont j'ai besoin. Depuis, je suis débutant en PHP, ça a été difficile pour moi. Si vous avez une idée, veuillez répondre.
Merci d'avance.

38
JohnUS
$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

Fonctionne correctement avec toutes vos entrées d'exemple.

66
webbiedave
$str = 'http://www.google.com/';
$str = preg_replace('#^https?://#', '', rtrim($str,'/'));
echo $str; // www.google.com
27
Mahdi

Il existe de nombreuses façons d'extraire le domaine d'une URL que j'ai publiée 4 façons ci-dessous, du plus court au plus long.

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

#

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

Toutes les fonctions ci-dessus renvoient la même réponse: example.com

9
Jake

Essayez ceci, il supprimera ce que vous vouliez (http :: //, www et barre oblique de fin) mais conservera d'autres sous-domaines tels que example.google.com

$Host = parse_url('http://www.google.com', PHP_URL_Host);
$Host = preg_replace('/^(www\.)/i', '', $Host);
4
h00ligan
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]);

Cela retournerait un domaine de second niveau, bien qu'il soit inutile pour les domaines .co.uk par exemple, vous pourriez donc vouloir faire un peu plus de vérification et inclure des parties supplémentaires si strrev ($ Host [0]) est uk, au, etc.

3
gintas
$value = 'https://google.ca';
$result = str_ireplace('www.', '', parse_url($value, PHP_URL_Host));
// google.ca
1
kejodion
1
matzino

cela représentera http/https et www et la barre oblique finale

$str = 'https://www.google.com/';
$str = preg_replace('#(^https?:\/\/(w{3}\.)?)|(\/$)#', '', $str);
echo $str; // www.google.com

Demandez simplement si vous avez besoin d'aide pour comprendre l'expression régulière.

0
A. Dady