Bonjour,
Je sais qu'on trouve énormément de ressources sur le Web à ce sujet. Cependant, après avoir opté pour une solution qui me convenait, je me bute à un problème de mise en forme d'expression régulière. Explications...
Voici le code que j'utilise (en m'inspirant donc de la page vers laquelle pointe mon lien plus haut) :
Les url sont bien remplacées par le lien mais, lorsqu'elles sont suivies d'une virgule ou d'un point également (puisque le motif repère les chaînes commençant par http, https et ftp et comportant une chaîne sans espaces) ! J'ai donc essayé d'arranger le motif permettant de reconnaître les url en ajoutant le fait qu'il ne faut pas prendre en compte une virgule, un point (éventuellement, j'ajouterai une parenthèse fermante, un crochet fermant, un point-virgule) qui se trouvent à la fin de l'expression capturée. J'ai tenté ça :
Mais bien évidemment, cela ne fonctionne pas (d'ailleurs je ne sais pas trop pourquoi
) ! J'ai passé une semaine à essayer de trouver la solution, mais rien n'y fait, je sèche lamentablement.
Une idée, une piste ou mieux une solution ?
Merci d'avance
Modifié par jojaba (20 Apr 2010 - 21:50)
Je sais qu'on trouve énormément de ressources sur le Web à ce sujet. Cependant, après avoir opté pour une solution qui me convenait, je me bute à un problème de mise en forme d'expression régulière. Explications...
Voici le code que j'utilise (en m'inspirant donc de la page vers laquelle pointe mon lien plus haut) :
function pxUrlToLink($commenttext) {
//motifs à repérer
$in = array(
'`((?:https?|ftp)://\\S+)`',
'`;\)`'
);
//remplacement des chaînes correspondant aux motifs
$out = array(
'<a href="$1" title="$1">$1</a>',
'<img src="xmedia/emoticones/clin_d_oeil.gif" alt="Clin d\'oeil" />'
);
// Exécution de l'expression régulière et envoi du texte formaté
$commenttext = preg_replace($in, $out, $commenttext);
return $commenttext;
}
Les url sont bien remplacées par le lien mais, lorsqu'elles sont suivies d'une virgule ou d'un point également (puisque le motif repère les chaînes commençant par http, https et ftp et comportant une chaîne sans espaces) ! J'ai donc essayé d'arranger le motif permettant de reconnaître les url en ajoutant le fait qu'il ne faut pas prendre en compte une virgule, un point (éventuellement, j'ajouterai une parenthèse fermante, un crochet fermant, un point-virgule) qui se trouvent à la fin de l'expression capturée. J'ai tenté ça :
((?:https?|ftp)://\\S+[^,.])
Mais bien évidemment, cela ne fonctionne pas (d'ailleurs je ne sais pas trop pourquoi

Une idée, une piste ou mieux une solution ?
Merci d'avance

Modifié par jojaba (20 Apr 2010 - 21:50)