[php][expresions régulieres] couper les liens sur un forum

couper les liens sur un forum [php][expresions régulieres] - PHP - Programmation

Marsh Posté le 26-01-2005 à 22:28:00    

salut à tous (tes)  
 
je cherches l'astuce pour qu'un lien posté sur un forum soit "coupé", un peu comme ici par ex :  
http://forum.hardware.fr/message.p [...] subcat=393
 
vous voyez ? bon j'ai deja ça :  

Code :
  1. $body = eregi_replace("(http|mailto|news|ftp|https)://(([-éa-z0-9\/\.\?_=#@:~&% '])*)", "<a href=\"\\1://\\2\" target=\"_blank\">\\1://\\2</a>", $body);


 
comment faire limiter ce \\2 ?
merci de votre aide


Message édité par p@radox le 26-01-2005 à 23:01:04
Reply

Marsh Posté le 26-01-2005 à 22:28:00   

Reply

Marsh Posté le 26-01-2005 à 22:30:14    

1) Tu fais ton site XHTML compliant
2) tu l'ouvre en tant que document XML (avec la librairie DOM XML)
3) T'appelle la fonction get_elements_by_tagname, pour récupérer tous les 'a'
4) Tu regarde la longeur du contenu, récupéré par get_content.
5) Puis suivant la longueur, tu modifie en mettant les [...] avec set_content.
6) Enfin, tu output le truc
 
En conclusion -> Faites des pages valide XHTML, ça aide ;)


Message édité par FlorentG le 26-01-2005 à 22:30:44
Reply

Marsh Posté le 26-01-2005 à 22:33:24    

ok ça va demander plus de travail que je ne pensais (eh oui je suis une authentique feignasse) merci qd meme :)


Message édité par p@radox le 26-01-2005 à 22:34:20
Reply

Marsh Posté le 26-01-2005 à 22:34:40    

Bah, si ton site est compliant, ce ne sera pas très dur à faire ;)

Reply

Marsh Posté le 26-01-2005 à 22:38:26    

FlorentG a écrit :

Bah, si ton site est compliant, ce ne sera pas très dur à faire ;)


il ne l'est pas  [:totoz]  
 
 
(du tout!)


Message édité par p@radox le 26-01-2005 à 22:38:38
Reply

Marsh Posté le 26-01-2005 à 22:47:47    

Ah... Effectivement... On ne le répètera jamais assez, faites votre site en XHTML ! Ca peut vous sauver la vie !

Reply

Marsh Posté le 26-01-2005 à 22:50:08    

Oui, en fait ce forum, soit cherche les balises [url], soit fait une expression régulière barbare comme la tienne :D

Reply

Marsh Posté le 26-01-2005 à 22:51:32    

FlorentG a écrit :

Ah... Effectivement... On ne le répètera jamais assez, faites votre site en XHTML ! Ca peut vous sauver la vie !


merci du conseil ;)
en fait je pense qu'il faut y penser avant ! car apres ça devient assez casse tete..

Reply

Marsh Posté le 27-01-2005 à 20:20:00    

pas d'autre solutions donc ?
 
je dit ça finalement ce forum n'est pas valide xhtml non plus http://validator.w3.org/check?uri= [...] formulaire


Message édité par p@radox le 29-01-2005 à 00:24:32
Reply

Marsh Posté le 27-01-2005 à 20:32:49    

Oui il est pas valide. Regarde mon post précedent :)

Reply

Marsh Posté le 27-01-2005 à 20:32:49   

Reply

Marsh Posté le 28-01-2005 à 09:40:45    

p@radox a écrit :

Code :
  1. $body = eregi_replace("(http|mailto|news|ftp|https)://(([-éa-z0-9\/\.\?_=#@:~&% '])*)", "<a href=\"\\1://\\2\" target=\"_blank\">\\1://\\2</a>", $body);



Utilise preg_replace avec l'option e (voir doc), voici un exemple avec ta regexp :

Code :
  1. $body = preg_replace("#(http|mailto|news|ftp|https)://(([-éa-z0-9\/\.\?_=\#@:~&% '])*)#ei", "build_url('\\0')", $body);

et tu crée une fonction build_url qui pourra "couper" le nom du lien selon la longueur.
 
PS :
- ta regexp n'est pas très propre,
- j'ai du mal à comprendre pourquoi tu insère du bbcode dans ton lien.


Message édité par soju le 28-01-2005 à 09:49:05
Reply

Marsh Posté le 29-01-2005 à 01:27:54    

soju a écrit :

Utilise preg_replace avec l'option e (voir doc), voici un exemple avec ta regexp :

Code :
  1. $body = preg_replace("#(http|mailto|news|ftp|https)://(([-éa-z0-9\/\.\?_=\#@:~&% '])*)#ei", "build_url('\\0')", $body);

et tu crée une fonction build_url qui pourra "couper" le nom du lien selon la longueur.
 
PS :
- ta regexp n'est pas très propre,
- j'ai du mal à comprendre pourquoi tu insère du bbcode dans ton lien.


 
 
merci beaucoup à tous les deux de vos conseils : cependant j'ai choisi les regexp !
en fait, soju, le BB code vient de hfr, je voulait mettre en relief ce bout de code (mais je suis gouré, et en fait ça marche dans les [/code] )
Donc ça marche nickel : voici donc,  
 

Code :
  1. $body = preg_replace("#(http)://(([-éa-zA-Z0-9\/\.\?_=\#@:~&% '])*)#e", "build_url('\\0')", $body);
  2. function build_url($url){
  3. if ( strlen($url)>70){
  4. $new_url_end = substr($url, -20);
  5. $new_url_begin = substr($url, 0,60);
  6. $new_url = $new_url_begin." [...] ".$new_url_end;
  7. $url = "<a href=".$url." target='_blank'>".$new_url."</a>";
  8. }
  9. else{
  10. $url = "<a href=".$url." target='_blank'>".$url."</a>";
  11. }
  12. return $url;
  13. }


 
 [:freekill]   :jap:


Message édité par p@radox le 29-01-2005 à 01:29:21
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed