Pb avec un regex tranformation lien
Posté : 23 mai 2006, 09:51
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.
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...
Merci pour votre aide !
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.htmlSavez vous comment régler ce regex pour corriger l'erreur ? Je ne suis pas très fortiche...
Merci pour votre aide !