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.
$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.
$str = 'http://www.google.com/';
$str = preg_replace('#^https?://#', '', rtrim($str,'/'));
echo $str; // www.google.com
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
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);
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.
$value = 'https://google.ca';
$result = str_ireplace('www.', '', parse_url($value, PHP_URL_Host));
// google.ca
Utilisez parse_url
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.