Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1900 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP][REGEX]réduire le texte d'un lien dans une chaine

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP][REGEX]réduire le texte d'un lien dans une chaine

n°1612807
nabbo
Posté le 18-09-2007 à 23:43:18  profilanswer
 

:hello:
 
je bute sur un problème de regex.
je cherche à réduire le texte qui s'affiche dans un lien.
 
exemple :
je cherche à remplacer :

Code :
  1. <a href="http://www.monsite_tres_tres_tres_long.com">http://www.monsite_tres_tres_tres_long.com</a>


 
par :

Code :
  1. <a href="http://www.monsite_tres_tres_tres_long.com">http://www.monsite...</a>


 
pour l'instant, la seule chose que j'arrive à faire c'est supprimer complètement le lien (regex toute faite) et garder le texte vierge :

Code :
  1. preg_replace('/<a href="(.*?)">(.*?)<\\/a>/i', '$2', $chaine)


 
j'ai cru comprendre que le '$2' , comme deuxième argument de preg_replace, renvoie à (.*?), mis en gras ci dessus.
 
ensuite, je peux rajouter le lien, grace à une fonction trouvée sur php.net/preg_match :

Code :
  1. preg_replace("/\s(([a-zA-Z]+:\/\/)([a-z][a-z0-9_\..-]*
  2. [a-z]{2,6})([a-zA-Z0-9\/*-?&%]*))\s/i", " <a href=\"$1\">$3</a> ", $chaine);


 
là, je dois agir sur le $3, mais je ne sais pas comment en réduire la longueur...
 
pour résumer,  
comment je peux faire pour garder le lien (attribut href) entier, mais réduire le texte affiché ?
 
je sèche un peu ... :??:  
 
merci de votre aide :jap:


Message édité par nabbo le 19-09-2007 à 00:11:11
mood
Publicité
Posté le 18-09-2007 à 23:43:18  profilanswer
 

n°1612822
anapajari
s/travail/glanding on hfr/gs;
Posté le 19-09-2007 à 08:53:20  profilanswer
 

Code :
  1. preg_replace('/<a href="(.*?)">\\1<\/a>/ie', "<a href='$1'>".( strlen($1)>20?substr($1,1,20)."...":$1)."</a>", $chaine);


ou un truc dans le genre


Message édité par anapajari le 19-09-2007 à 08:54:47
n°1613069
nabbo
Posté le 19-09-2007 à 15:45:24  profilanswer
 

euh...
parse error : il comprend pas le $1... et moi non plus
 
c'est ce genre de choses que j'avais testé, mais sans succès.
apparemment, ce système est utilisé sur ce forum (HFR) pour écourter les liens...
 
d'autres suggestions ?
 

n°1613082
nabbo
Posté le 19-09-2007 à 16:05:44  profilanswer
 

bon.... j'ai un semblant de réponse :
 
j'arrive à remplacer un lien comme il faut :

Code :
  1. $string='<a href="http://www.monsite_tres_tres_tres_long.com">http://www.monsite_tres_tres_tres_long.com</a>';
  2. $matches=array();
  3. preg_match('/<a href="(.*?)">\\1<\/a>/ie',$string,$matches);
  4.  
  5. echo preg_replace('/<a href="(.*?)">(.*?)<\\/a>/i', '<a href="'.$matches[1].'">'.(strlen($matches[1])>20?substr($matches[1],0,20)."[...]":$matches[1])."</a>", $string);


 
ca, ca a l'air de marcher.
 
maintenant, si j'ai plusieurs liens... ca ne marche plus... à cause du $matches[1], il remplace tout par le même mot/site.

Code :
  1. $string='<a href="http://www.monsite_tres_tres_tres_long.com">http://www.monsite_tres_tres_tres_long.com</a> blablabla mon super site <a href="toto">mon deuxième super site</a>';
  2. $matches=array();
  3. preg_match('/<a href="(.*?)">\\1<\/a>/ie',$string,$matches);
  4.  
  5. echo preg_replace('/<a href="(.*?)">(.*?)<\\/a>/i', '<a href="'.$matches[1].'">'.(strlen($matches[1])>20?substr($matches[1],0,20)."[...]":$matches[1])."</a>", $string);


 
écrase les deux valeurs avec  : http://www.monsite_tres_tres_tres_long.com
 
comment faire correspondre tout ca avec preg_replace ?
 
merci :jap:


Message édité par nabbo le 19-09-2007 à 16:12:26
n°1613130
anapajari
s/travail/glanding on hfr/gs;
Posté le 19-09-2007 à 17:28:49  profilanswer
 

nabbo a écrit :

euh...
parse error : il comprend pas le $1... et moi non plus


\\1 à la place, désolé l'habitude du perl.
voir la page de doc sur l'utilisation de l'option e

n°1613138
nabbo
Posté le 19-09-2007 à 17:39:24  profilanswer
 

ca ne marche pas mieux...
où est ce que je dois le placer ?
d'après la doc, le $n se place dans le code, le \\1 se place dans la regex... mais je comprends pas quand même...

n°1613155
sielfried
Posté le 19-09-2007 à 17:58:13  profilanswer
 

http://fr.php.net/preg_replace
 
Exemple 1878. Utilisation de l'option 'e'
 
<?php
preg_replace("/(<\/?)(\w+)([^>]*> )/e",  
             "'\\1'.strtoupper('\\2').'\\3'",  
             $html_body);
?>  


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP][REGEX]réduire le texte d'un lien dans une chaine

 

Sujets relatifs
Requête select sur une chaine sans tenir compte des espaces[PHP] Quels livres pour apprendre le php
[PHP]Upload fichier de 30mo?!PHP & MySQL chez Free, où stocker le mot de passe ?
[VB6] : Supprimer le titre et numéro de page d'un fichier texte[PHP] et Excel
Besoin de php 4.2.xLien sur image SWF
ALT + ENTREE en PHP pour ExcelExtraire le texte d'un document word
Plus de sujets relatifs à : [PHP][REGEX]réduire le texte d'un lien dans une chaine


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR