J'ai besoin de créer une fonction qui analyse le domaine à partir d'une URL.
Donc avec
http://google.com/dhasjkdas/sadsdds/sdda/sdads.html
ou
http://www.google.com/dhasjkdas/sadsdds/sdda/sdads.html
ça devrait revenir google.com
avec
http://google.co.uk/dhasjkdas/sadsdds/sdda/sdads.html
il devrait revenir google.co.uk
.
parse_url()
renvoie l' hôte , pas le domaine .parse_url
plutôt que sur un vague "que puis-je faire".Réponses:
Découvrez
parse_url()
:parse_url
ne gère pas très bien les URL vraiment mal déformées, mais c'est bien si vous vous attendez généralement à des URL décentes.la source
parse_url
ne gère pas les sous-domaines, mais Purl le fait: github.com/jwage/purlparse_url()
analysera éventuellement les URL avec un domaine qui contient des tirets à tort. Impossible de trouver une preuve définitive, mais vérifiez ce bogue .FILTER_VALIDATE_URL
utilise enparse_url()
interne.print parse_url($url, PHP_URL_HOST))
si vous n'avez besoin du$parse
tableau pour rien d'autre.Cela renverrait le
google.com
pour http://google.com/ ... et http://www.google.com/ ...la source
De http://us3.php.net/manual/en/function.parse-url.php#93983
la source
host
etpath
.Message: Undefined index: host
des idées pour résoudre ce problème?!empty($parseUrl['host'])
.Le code qui était censé fonctionner à 100% ne semblait pas le couper pour moi, j'ai corrigé un peu l'exemple mais j'ai trouvé du code qui n'aidait pas et des problèmes avec lui. je l'ai donc changé en quelques fonctions (pour éviter de demander la liste à Mozilla tout le temps et de supprimer le système de cache). Cela a été testé sur un ensemble de 1000 URL et semble fonctionner.
Ensuite, utilisez-le comme
Je sais que j'aurais dû en faire une classe, mais je n'ai pas eu le temps.
la source
la source
Si vous voulez extraire l'hôte de la chaîne
http://google.com/dhasjkdas/sadsdds/sdda/sdads.html
, l'utilisation de parse_url () est une solution acceptable pour vous.Mais si vous voulez extraire le domaine ou ses parties, vous avez besoin d'un package qui utilise la liste de suffixes publics . Oui, vous pouvez utiliser des fonctions de chaîne autour de parse_url (), mais cela produira parfois des résultats incorrects.
Je recommande TLDExtract pour l'analyse de domaine, voici un exemple de code qui montre diff:
la source
J'ai trouvé que la solution de @ philfreo (référencée sur php.net) est assez bien pour obtenir de bons résultats, mais dans certains cas, elle affiche le message "notice" et "Strict Standards" de php. Voici une version fixe de ce code.
la source
Voici le code que j'ai créé qui ne trouve à 100% que le nom de domaine, car il prend en compte les sous tld mozilla. La seule chose que vous devez vérifier est de savoir comment créer le cache de ce fichier, de sorte que vous n'interrogez pas Mozilla à chaque fois.
Pour une raison étrange, des domaines comme co.uk ne sont pas dans la liste, vous devez donc faire des piratages et les ajouter manuellement. Ce n'est pas la solution la plus propre mais j'espère que cela aide quelqu'un.
la source
co.uk
ne figurait pas sur la liste, était qu'il s'agissait d'une liste de TLD, pas de domaines. Le ccTLD a beaucoup changé depuis que cette réponse a été écrite. Notamment: «Les nouvelles inscriptions directement sous .uk sont acceptées par Nominet depuis le 10 juin 2014 08:00 BST, cependant il y a une période de réservation pour les clients existants qui ont déjà un .co.uk, .org.uk, .me.uk , .net.uk, .ltd.uk ou .plc.uk pour réclamer le domaine .uk correspondant, qui s'exécute jusqu'à 07h59 BST le 10 juin 2019. " ( Source )Vous pouvez passer PHP_URL_HOST dans la fonction parse_url comme deuxième paramètre
la source
la source
Veuillez envisager de remplacer la solution acceptée par ce qui suit:
parse_url () inclura toujours tous les sous-domaines, donc cette fonction n'analyse pas très bien les noms de domaine. Voici quelques exemples:
Au lieu de cela, vous pouvez envisager cette solution pragmatique. Il couvrira de nombreux noms de domaine, mais pas tous - par exemple, les domaines de niveau inférieur tels que «sos.state.oh.us» ne sont pas couverts.
Enfin, le PHP Domain Parser de Jeremy Kendall vous permet d'analyser le nom de domaine à partir d'une URL. L'analyseur de nom d'hôte d'URI de ligue fera également le travail.
la source
parse_url n'a pas fonctionné pour moi. Il a seulement renvoyé le chemin. Passer aux bases en utilisant php5.3 +:
la source
J'ai édité pour vous:
Toutes les URL de type (www.domain.ltd, sub1.subn.domain.ltd aboutiront à: domain.ltd.
la source
J'ajoute cette réponse tard car c'est la réponse qui apparaît le plus sur Google ...
Vous pouvez utiliser PHP pour ...
pour récupérer l' hôte mais pas le domaine privé auquel l'hôte se réfère. (L'exemple
www.google.co.uk
est l'hôte, maisgoogle.co.uk
est le domaine privé)Pour saisir le domaine privé, vous devez connaître la liste des suffixes publics sur lesquels on peut enregistrer un domaine privé. Cette liste est organisée par Mozilla à l' adresse https://publicsuffix.org/
Le code ci-dessous fonctionne lorsqu'un tableau de suffixes publics a déjà été créé. Appelez simplement
avec le code restant ...
la source
Cela fonctionnera généralement très bien si l'URL d'entrée n'est pas totalement indésirable. Il supprime le sous-domaine.
Exemple
Contribution:
http://www2.website.com:8080/some/file/structure?some=parameters
Production:
website.com
la source
Combinant les réponses de worldofjr et Alix Axel en une seule petite fonction qui gérera la plupart des cas d'utilisation:
la source
la source
Découvrez parse_url ()
la source
Utilisez simplement comme suit ...
la source