Forum > PHP > URL en lien avec ancre réduite

URL en lien avec ancre réduite

ok Le problème posé sur ce sujet a été résolu.
avatar de Chopin
Membre
# Le 20/08/2009 à 20h43
Salut à tous!

En fait, tout est dans le titre. Pour le moment, j'ai une fonction qui transforme les URLs contenues dans une variable en lien HTML cliquable mais le problème c'est que je cherche à réduire l'ancre du lien. Par exemple, j'ai ce type d'url h-t-t-p://www.un-nom-de-site-un-peu-beaucoup-trop-long.fr je cherche à obtenir en ancre un truc du genre h-t-t-p://www.un-nom-d......p-long.fr.
En prenant soin de marquer la partie manquante du texte par des petits points mais pour le moment je ne trouve rien de concluant.

Voila voila, si l'un d'entre vous pourrait me mettre dans la bonne direction je lui en serais très reconnaissant. Merci par avance!
avatar de Tony_
Administrateur
# Le 20/08/2009 à 21h29
Bonjour.
Si tu souhaite rétrécir la taille d'une ancre je te suggère dans un premier temps d'utiliser une fonction assez simple pour remplacer "http://www.example.com" par "www.example.com".
Pour cela il faut utiliser la fonction suivante:
  1. $url_parsee = parse_url('http://www.example.com');
  2. $host = $url_parsee['host'];

Avec une telle fonction la variable $host aura alors la valeur: "www.example.com".

Il existe une autre méthode permettant de ne garder que le nom de domaine (donc de supprimer le sous-domaine), voici le code correspondant:
  1. $url_parsee = parse_url('http://www.example.com');
  2. $host = $url_parsee['host'];
  3. $NDD = preg_replace('#(.+)\.(.+)\.(.+)#isU', '$2.$3', $host);

Avec ce code, la variable $NDD est égal à "example.com".


Mis à part ça, pour répondre plus précisément à ta fonction, je te suggère d'utiliser strlen pour détecter si l'ancre du lien est trop grande. Si l'ancre est trop grande je te suggère de te baser sur substr pour créer ta fonction.
En imaginant $NDD possède le nom de domaine que tu souhaite "rétrécir", il t'est possible de faire quelque chose de ce genre:
  1. $NDD = 'example.com';
  2. $longueurNDD = strlen($NDD); // $longueurNDD = 11
  3. $NDD1 = substr($NDD, 0, 4); // $NDD1 = 'exam'
  4. $NDD2 = substr($NDD, $longueurNDD-4, 4); // $NDD2 = '.com'
  5. $AncreFinal = $NDD1.'...'.$NDD1; // $AncreFinal = 'exam....com'

J'espère qu'il n'y a pas d'erreur dans ce code et qu'il répond à ta demande.

Cordialement.
N'hésitez pas à consulter le dossier référencement. smiley
Sinon hors internet je suis développeur web PHP.
avatar de Chopin
Membre
# Le 21/08/2009 à 22h28
Salut,

Merci pour ta réponse qui m'a aidé à trouver la solution. J'ai fait une petite fonction avec ce que tu m'a donné mais ça m'a l'air un peu lourd. Si tu serais faire quelque chose de plus légers ça m'intéresserais beaucoup sinon tanpis, j'utiliserais mon code tel quel.

  1.  
  2. // Redimensionne l'URL
  3. function reduc_url($NDD)
  4. {
  5. // Longueur de l'URL
  6. $longueurNDD = strlen($NDD);
  7.  
  8. if ($longueurNDD >= 45)
  9. {
  10. $NDD1 = substr($NDD, 0, 27);
  11. $NDD2 = substr($NDD, $longueurNDD-8, 10);
  12. $AncreFinal = $NDD1.']----['.$NDD2;
  13.  
  14. // Return l'URL réduite si >= à 45
  15. return $AncreFinal;
  16. }
  17. else
  18. {
  19. // Retourne l'URL non réduite si < à 45
  20. return $NDD;
  21. }
  22. }
  23.  
  24.  
  25.  
  26. // Transformer les urls en lien hypertexte
  27. function url2link($texte)
  28. {
  29. $texte = str_replace("&", "é", $texte);
  30.  
  31. // Transformation de l'URL en lien
  32. $texte = eregi_replace("(http|mailto|news|ftp|https)://(([-éa-z0-9\/\.\?_=#@:~])*)", "\n\n<a class=\"LIEN_form\" rel=\"nofollow\" href=\"\\1://\\2\" onclick=\"window.open(this.href); return false;\">\\1://\\2</a>\n\n", $texte);
  33.  
  34. // On remplace toutes les URLs trop grandes par des URLs réduites
  35. $texte = preg_replace_callback('#return false;">(.*)\</a>#isU',
  36. create_function('$matches', 'return \'return false;">\'.str_replace(\'(.*)\', \'\', reduc_url($matches[1])).\'</a>\';'), $texte);
  37.  
  38. // Enfin on renvoi le texte en remettant leurs "&" comme il faut
  39. return str_replace("é", "&", $texte);
  40. }



Encore merci à toi,
@ plus!