dire que quelqu'un entre une URL comme ceci:
http://i.imgur.com/a/b/c?query=value&query2=value
Et je veux retourner: imgur.com
pas i.imgur.com
C'est le code que j'ai maintenant
$sourceUrl = parse_url($url);
$sourceUrl = $sourceUrl['Host'];
Mais ceci retourne i.imgur.com
Vérifiez le code ci-dessous, il devrait faire le travail correctement.
<?php
function get_domain($url)
{
$pieces = parse_url($url);
$domain = isset($pieces['Host']) ? $pieces['Host'] : $pieces['path'];
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
return $regs['domain'];
}
return false;
}
print get_domain("http://mail.somedomain.co.uk"); // outputs 'somedomain.co.uk'
?>
Vous avez besoin d'un paquet qui utilise Liste des suffixes publics . Oui, vous pouvez utiliser les fonctions de chaîne arround parse_url () ou regex, mais elles produiront un résultat incorrect dans les URL complexes.
Je recommande TLDExtract pour l'analyse de domaine, voici un exemple de code:
$url = 'http://i.imgur.com/a/b/c?query=value&query2=value';
parse_url($url, PHP_URL_Host); // will return 'i.imgur.com'
$extract = new LayerShifter\TLDExtract\Extract();
$result = $extract->parse($url);
$result->getFullHost(); // will return 'i.imgur.com'
$result->getSubdomain(); // will return 'i'
$result->getRegistrableDomain(); // will return 'imgur.com'
$result->getSuffix(); // will return 'com'
J'ai trouvé une bibliothèque très utile sur publicsuffix.org, PHP analyseur de domaine est un analyseur de domaine basé sur une liste de suffixes publics implémenté en PHP.
https://github.com/jeremykendall/php-domain-parser
<?php
// this will do the job
require_once '../vendor/autoload.php';
$pslManager = new Pdp\PublicSuffixListManager();
$parser = new Pdp\Parser($pslManager->getList());
var_dump($parser->getRegistrableDomain('www.scottwills.co.uk'));
?>
chaîne (16) "scottwills.co.uk"
Le code ci-dessous devrait être parfait pour le travail.
function get_domain($url){
$charge = explode('/', $url);
$charge = $charge[2]; //assuming that the url starts with http:// or https://
return $url;
}
echo get_domain('http://www.example.com/example.php');