Voici le code pour l'extraction d'un NDD dans une variable contenant une URL :
[Vous devez être identifié pour voir le texte caché.]
C'est tout !![]()
Alain AKA Arma
<?php
// Chaine contenant l'URL
$url = 'http://www.cigiema.fr/index.php';
// Repérer le nom de Domaine dans l'URL
preg_match("/^(http:\/\/)?([^\/]+)/i",$url,$chaines);
$host = $chaines[2];
// Repérer les derniers segments
preg_match("/[^\.\/]+\.[^\.\/]+$/",$host,$chaines);
echo 'Nom de domaine : '.$chaines[0]."\n";
?>Hors ligne
Merci Crazy ---> pour quelles applications ? Un exemple ?
Hors ligne
Des exemples comme cela, à brûle pourpoint, je n'en ai pas...
Mais c'etait en relation avec ce Topic : t795-Filtrage-lors-extraction-donnees
Et comme cette procédure est en PHP et qu'elle n'avait pas sa place dans un Forum SQL (MySQL) je l'ai séparée...![]()
Alain AKA Arma
Hors ligne
Il serait plus intéressant d'extraire l'url du Dossier dans lequel se trouve la page,
éventuellement avec un FLAG BOOL pour retourner une URL absolue ou relative à la racine du site...
Une telle Fonction mériterait d'être conservée dans une LIB de Développement...
Hors ligne
Pour ce la, il y a :
Hors ligne
Bonjour,
J'utilise cette regex pour extraire les noms de domaine, seulement ça ne fonctionne pas pour les TLD composés (.co.uk,.co.ma, etc...)
Malgré quelques bidouilles, je n'ai pas réussi à l'adapter : (Il faut dire que les regex, c'est pas mon fort).
Avez vous trouvé une solution à ce problème ?
Merci par avance,
Aurelien
Hors ligne
Oui, il y a une solution (nul besoin de REGEX pour obtenir un résultat dans le cas présent) ![]()
Paramètres :
- Entrée : $url (n'importe quel format) ;
- Sortie : $extracted_domain
Code :
// Tester éventuellement la présence de 'http://'
if (!strstr($url, 'http://')) $url = 'http://'.$url';
// Extraction du NDD complet
$url_sliced_array = explode('/', $url);
$extracted_domain = $url_sliced_array[2];
/*
// Explications :
$url_sliced_array[0] == 'http:';
$url_sliced_array[1] == ''; // Chaîne vide !
$url_sliced_array[2] == '[[subsubdomain.]subdomain.]domain.tld[.uppertld]'; // [item] optionnel... SSV...
// etc... (éventuels répertoire, sous-répertoire et nom de page web [avec ou sans paramètres])
*/
// A tester :
// $extracted_domain = explode('/', $url)[2]; // Pourquoi pas ? Et ce serait encore plus rapide...
// Mais là, j'ai un doute sur les capacités du préprocesseur PHP...C'est élégant et amplement suffisant !
Alain AKA Arma
Hors ligne
Merci Alain !
Comme je ne maîtrise pas l'url en entrée, elle peut avoir un sous domaine, ou pas.
Reste plus qu'à trouver un moyen de le virer s'il est présent. ![]()
Hors ligne
C'est facile aussi...
...
Idem que précédemment !
Il y a 3 cas :
- pas de sous-domaine ;
- sous-domaine www[n] ;
- sous-sous-domaine.sous-domaine !
Là, ça se complique un peu (le REGEX est nécessaire
).
Voila ce que j'ai fait pour formater correctement des URL :
(désolé, ce code de T@rlouze est réservé aux membres)
[Vous devez être identifié pour voir le texte caché.]![]()
Alain AKA Arma
PS : Cela n'extrait pas le NDD. Mais moyennant quelques lignes de code de plus, cela pourra le faire ! ![]()
function format_submitted_url($url)
{
if (strstr($url, 'http://')) $url = substr($url,7); // On enlève le http:// avant le traitement
if (substr($url,-1) != '/') $url = $url.'/'; // S'il n'y en a pas, on ajoute un / arbitraire à la fin de l'URL
$url = str_replace('//','/',$url); // Si des fieffés tricheurs mettent un ou deux / à la fin... C'est ballot, mais on ne sait jamais...
// Traitement ( si pas de ww[w]X présent)
if (!preg_match("!^[w]{2}[w]?[0-9]+!i",$url))
{
// On considère toujours que c'est un sous-domaine
if (preg_match("!^[w]{3}\.!i",$url)) $url = substr($url,4); // On supprime les www et le point éventuels (si domaine) !
if (preg_match("!^[w]{2}\.!i",$url)) $url = substr($url,3); // On supprime les ww et le point éventuels (si domaine), il arrive parfois qu'un w soit oublié !
// Si ce n'est pas un sous-domaine avéré (voire encore pire) --> On va remettre les www et le point !
if (preg_match("!^[^.]+\.([a-z]{2,4}|[a-z]{2}\.[a-z]{2})/!i",$url)) $url = 'www.'.$url;
elseif (preg_match("!^[^.]+\.(com\.[a-z]{2}|int\.[a-z]{2}|edu\.[a-z]{2}|jed\.[a-z]{2}|gov\.[a-z]{2}|gouv\.[a-z]{2}|asso\.[a-z]{2})/!i",$url)) $url = 'www.'.$url;
}
// On supprime le / qui se trouve à la fin de l'URL (il vaut mieux supprimer celui que l'on a ajouté si il y a des paramètres ou une page spécifique)
$url = 'http://'.substr($url,0,(strlen($url) - 1)); // On remet aussi le http://, c'est mieux !
// Et vlan ! On renvoit le bazar... Mais sans majuscules !
return strtolower($url);
}Hors ligne
Sympa ce truc. Merci
De mon côté, j'utilise parse_url associé à une regex pour extraire les NDD
Hors ligne
Donc, pour faire la fonction exacte demandée, si Aurélien n'a pas trouvé mieux, il suffit de faire ceci :
(members only - sorry - because this is high tarlouzery zarbi script here)
[Vous devez être identifié pour voir le texte caché.]
Ah ah ah ah ah...
Il en voulait du REGEX... Il est servi !
![]()
Alain AKA Arma
// Tester éventuellement la présence de 'http://'
if (strstr($url, 'http://')) $url = substr($url,7); // On enlève le http:// avant le traitement
if (substr($url,-1) != '/') $url = $url.'/'; // S'il n'y en a pas, on ajoute un / arbitraire à la fin de l'URL
// Y a-t-il des www ou autre forme ? si oui, on les vire !
if (preg_match("!^[w]{2}[w]?[0-9]+!i",$url))
{
$sliced_www = explode('.',$url);
$sliced_www[0] = '';
$url = substr(implode('.',$sliced_www),1);
}
// Extraction du NDD complet sans aucun sous-domaine
$url_sliced_array = explode('/', $url);
if ((preg_match("!^[^.]+\.([a-z]{2,4}|[a-z]{2}\.[a-z]{2})/!i",$url_sliced_array[2])) ||
(preg_match("!^[^.]+\.(com\.[a-z]{2}|int\.[a-z]{2}|edu\.[a-z]{2}|jed\.[a-z]{2}|gov\.[a-z]{2}|gouv\.[a-z]{2}|asso\.[a-z]{2})/!i",$url_sliced_array[2])))
$extracted_domain = $url_sliced_array[2];
else // il doit y avoir un sous-domaine (voire plus... mais là, c'est zarbi !)
{
$sliced_subdomain = explode('.',$url_sliced_array[2]);
$sliced_subdomain[0] = '';
$extracted_domain = substr(implode('.',$sliced_subdomain),1);
}
// Euh, s'il y a un sous-sous-domaine, c'est c*n... Et ça ne marche pas ! lolHors ligne
if (strstr($url, 'http://')) $url = substr($url,7); // On enlève le http:// avant le traitement
if (substr($url,-1) != '/') $url = $url.'/'; // S'il n'y en a pas, on ajoute un / arbitraire à la fin de l'URL
// Y a-t-il des www ou autre forme ? si oui, on les vire !
if (preg_match("!^[w]{2}[w]?[0-9]+!i",$url)) {
$sliced_www = explode('.',$url);
$sliced_www[0] = '';
$url = substr(implode('.',$sliced_www),1);
}
echo $url; //Vrillé !
// Extraction du NDD complet sans aucun sous-domaine
$url_sliced_array = explode('/', $url);
if ((preg_match("!^[^.]+\.([a-z]{2,4}|[a-z]{2}\.[a-z]{2})/!i",$url_sliced_array[2])) || (preg_match("!^[^.]+\.(com\.[a-z]{2}|int\.[a-z]{2}|edu\.[a-z]{2}|jed\.[a-z]{2}|gov\.[a-z]{2}|gouv\.[a-z]{2}|asso\.[a-z]{2})/!i",$url_sliced_array[2])))
$extracted_domain = $url_sliced_array[2];
else // il doit y avoir un sous-domaine (voire plus... mais là, c'est zarbi !)
{
$sliced_subdomain = explode('.',$url_sliced_array[2]);
$sliced_subdomain[0] = '';
$extracted_domain = substr(implode('.',$sliced_subdomain),1);
}
// Euh, s'il y a un sous-sous-domaine, c'est c*n... Et ça ne marche pas ! lolRe - J'ai enfin eu quelques minutes pour tester. Ca commence à vriller là où j'ai inséré le echo : La variable $url contient toujours les "www."
Dernière modification par aurelienmorillon (16/10/2008 19:42:15)
Hors ligne
Bah oui ![]()
Remplace :
if (preg_match("!^[w]{2}[w]?[0-9]+!i",$url))Par :
if (preg_match("!^[w]{2}[w]?[0-9]*!i",$url))Cela sera beaucoup mieux !![]()
Alain AKA Arma
PS : Ceci devant fonctionner pour supprimer les ww, wwN, www ou wwwN, etc.
N = chiffre ou nombre quelconque
Hors ligne
|
© 2006-2012 / A. G.☺ CiGi€M@®, 1997-2012 |
|
Reproduction totale ou partielle strictement interdite Contact : / |