Rendre un lien cliquable dans un texte et plus


zemage
WRInaute discret
WRInaute discret
 
Messages: 92
Inscription: 13 Jan 2006

Rendre un lien cliquable dans un texte et plus

Message le Jeu Fév 15, 2007 15:47

Bonjour, après des heures de recherches sur les expressions régulières
je ne trouve pas de solution.
Mon but : rendre dans un texte un liencliquable mais le rétrécir un peu en mettant 3 points pour le réduire s'il est supérieur à 30 caractères par ex.
ex : http://unsuperlientroplong...

$texte= ereg_replace("(http://)(([[:punct:]]|[[:alnum:]])*)","<a href=\"\\0\" target=\"_blank\">http://\\2</a>",$texte);

je voudrais faire un substring sur la partie \\2 pour afficher debutlien... si le l'url est trop long, hors je n'y arrive pas...
J'ai entenu parler de preg et preg callback mais impossible à modéliser, si quelqu'un sait ?
Merci


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Message le Jeu Fév 15, 2007 17:10

Tiens je te donne cela brut de décoffrage :

Code: Tout sélectionner
if      ($nbCaractère > 80) {
                        $chaine = explode(' ', substr($titreLien, 0, 80) );
                        
                        echo '<a href="'.$_SERVER['REQUEST_URI'].'#som'.$numAncreSom.'" tabindex="'.$numTabIndex.'" title="'.$item['title'].'">';
                        for   ($a = 0; $a < count($chaine) - 1 ; $a ++) {
                           echo ' '.$chaine[$a];
                           }
                        echo '</a> '.$chaine[$a].substr($titreLien, 80);
                        }
                  else   {
                        echo '<a href="'.$_SERVER['REQUEST_URI'].'#som'.$numAncreSom.'" tabindex="'.$numTabIndex.'">'.$titreLien.'</a>';
                        }


C'est une partie d'un de mes codes qui n'affiche que 80 caractères maxi dans un lien, mais j'ai la flemme de l'adapter pour toi.

Tu n'as plus qu'a bosser un peu.


zemage
WRInaute discret
WRInaute discret
 
Messages: 92
Inscription: 13 Jan 2006

Message le Jeu Fév 15, 2007 17:19

Merci medium pour ta réponse, seulement cela est réalisable sur une chaine définit comme lien, là c'est un ensemble de texte plus des liens donc le nombre de caractères n'est pas un critère.

Ex: j'ai un texte avec des mots....et des liens....et des mots...et des liens...
Ta fonction n'est pas adaptable à ce cas, car on ne sait pas ou le lien est dans le texte d'ou le ereg..

J'avais trouvé hier un début de piste sur http://www.webrankinfo.com/forums/viewtopic_19326.htm
mais pas plus avancé dessus en fait, je ne trouve pas de syntaxe.


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Message le Ven Fév 16, 2007 14:55

Dans ce cas, fais le en deux temps :

Met ton lien en place, puis contrôle sa longueur ; si longueur sup à x ; tu recoupes le lien non ?


zemage
WRInaute discret
WRInaute discret
 
Messages: 92
Inscription: 13 Jan 2006

Message le Ven Fév 16, 2007 20:36

J'ai essayé mais sans succés je vais continuer à chercher.Merci quand même.


NxtGen
WRInaute impliqué
WRInaute impliqué
 
Messages: 762
Inscription: 24 Oct 2006

Message le Ven Fév 16, 2007 21:32

Peut etre avec ca :

Code: Tout sélectionner
<?
$texte = "tout ton texte avec des http://www.example.net, des mots, des liens";
$match_count = preg_match_all("# ([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]+)*?) #si", $texte, $matches);
for ( $i=0; $i<$match_count; $i++) {
   $after = $matches[1][$i];
   $link = ( strlen($after)>30 ) ? substr($after, 0, 30)."..." : $after;
   $before = "<a href=\"$after\">$link</a>";
   $texte = str_replace($after, $before, $texte);
   }
echo $texte;
?>


Je suis pas sur de l'expression réguliere que j'ai utilisé, je l'ai pris dans les fonctions de PHPBB ;)


Patrice A.
WRInaute passionné
WRInaute passionné
 
Messages: 2415
Inscription: 11 Fév 2005

Message le Sam Fév 17, 2007 16:21

Il me semble qu'ereg_replace (ou preg_replace ?) permet dès PHP4 d'utiliser une fonction PHP comme chaine de remplacement (donc la première fonction proposée, pourrait faire l'affaire).


zemage
WRInaute discret
WRInaute discret
 
Messages: 92
Inscription: 13 Jan 2006

Message le Sam Fév 17, 2007 17:19

NxtGen a écrit:Peut etre avec ca :

Code: Tout sélectionner
<?
$texte = "tout ton texte avec des http://www.example.net, des mots, des liens";
$match_count = preg_match_all("# ([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]+)*?) #si", $texte, $matches);
for ( $i=0; $i<$match_count; $i++) {
   $after = $matches[1][$i];
   $link = ( strlen($after)>30 ) ? substr($after, 0, 30)."..." : $after;
   $before = "<a href="$after">$link</a>";
   $texte = str_replace($after, $before, $texte);
   }
echo $texte;
?>

Je suis pas sur de l'expression réguliere que j'ai utilisé, je l'ai pris dans les fonctions de PHPBB ;)


J'ai testé mais sans résultat...Merci a vous pour ces bouts de codes.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :

  • Recherche de citations d'un site en texte brut
    Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).
  • Test de lien (type de redirection)
    Cet outil vous permet de tester la validité d'un lien pour le référencement. Il vous indique la nature du lien (lien en dur, redirection bien gérée par les moteurs ou redirection mal gérée par les moteurs).
  • Calcul du taux de liens vers des pages internes
    Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.
  • Touch Graph Google Browser
    Description du TouchGraph Google Browser (outil externe) : il s'agit d'un outil graphique permettant de visualiser des sites similaires (selon Google). On peut sauter de site en site, et se rendre compte facilement des communautés de sites, ou des nébuleuses de sites traitant du même sujet.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités