Page 1 sur 1

Pb avec un regex tranformation lien

Posté : 23 mai 2006, 09:51
par charabia
Bonjour !

Je viens de récupérer un regex qui me permet de transformer plus sortes de liens afin qu'ils soient cliquables. Mais j'ai un gros souci.
<?php
$texte = 'Bonjour ou bonsoir à toutes et tous, 
Vous souhaitez rendre cliquable une ou des urls placées au 
 travers de vos textes comme celle-ci www.monsite.com.
Vous pourrez également matcher des urls avec leurs  
protocoles respectifs à savoir http://www.monsite.com/mondossier/mapage.html ou  
ftp://monsite.com, par exemple, ainsi que les url dynamique telle que  
http://site.com/regex/page.php?truc=montruc&machin=lemachin et aussi  
www.site.com/clicurl.php?truc=montruc&machin=lemachin et www.google.fr et [email protected]'; 


function clicklien($url){  
$in=array(  
    '`((?:https?|ftp|mailto)://\S+[[:alnum:]]/?)`si',
    '`((?<!//)(www\.\S+[[:alnum:]]/?))`si',
	'`([[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*\.([a-z]{2,4}))`'
    );  
$out=array(  
    '<a href="$1">$1</a>',  
    '<a href="http://$1">$1</a>',
	'<a href="mailto:$1">$1</a>'
    );  
return preg_replace($in,$out,$url);  
} 
  
echo clicklien($texte);

?>
Comme ça tout marche bien. Mais j'utilise la fonction nl2br() pour les sauts de lignes et c'est là que ça foire. Je simule un <br /> après un lien (www.monsite.com), par exemple :
$texte = 'Bonjour ou bonsoir à toutes et tous, 
Vous souhaitez rendre cliquable une ou des urls placées au 
 travers de vos textes comme celle-ci www.monsite.com<br />.
Vous pourrez également matcher des urls avec leurs  
protocoles respectifs à savoir http://www.monsite.com/mondossier/mapage.html ou  
ftp://monsite.com, par exemple, ainsi que les url dynamique telle que  
http://site.com/regex/page.php?truc=montruc&machin=lemachin et aussi  
www.site.com/clicurl.php?truc=montruc&machin=lemachin et www.google.fr et [email protected]';
Et là ça ne marche plus. J'ai ceci comme résultat :

Code : Tout sélectionner

www.monsite.com />. Vous pourrez également matcher des urls avec leurs protocoles respectifs à savoir http://www.monsite.com/mondossier/mapage.html
Toute cette phrase devient un lien et il me rajoute "/>" après mon lien.

Savez vous comment régler ce regex pour corriger l'erreur ? Je ne suis pas très fortiche... :oops:

Merci pour votre aide !

Posté : 12 juil. 2006, 15:09
par Snail
Salut, cela ne vien pas del a regex mais de la fonction nl2br() qu'il faut appeler avant d'appeler ta regex exemple :

echo nl2br(clicklien($message));


Voila ;)

Posté : 13 juil. 2006, 10:15
par charabia
Je regarde ça merci ;)