Module commentaire: activer un llink

cedman35 Messages postés 2 Date d'inscription vendredi 11 novembre 2005 Statut Membre Dernière intervention 24 septembre 2008 - 24 sept. 2008 à 10:08
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 24 sept. 2008 à 11:09
Bonjour a tous!

J'ai developpe en PHP un module de commentaires pour que les utilisateurs de mon site puissent commenter certains articles. Les commentaires sont stockes dans une BD MySQL.
L'utilisateur saisi son commentaire dans un textarea qui est transmis par $_POST grace a un formulaire.
Lorsque je recois les donnees par le $_POST, je fais imediatement un htmlspecialchars(). Ensuite, pour les inserer dans la BD, je fais un mysql_real_escape_string() sur les donnees pour eviter les attaques par injection SQL. Jusque la, tout va bien :)

C'est pour afficher les commentaires que je recontre un probleme. Je fais tout simplement un echo de la donnee extraite de la BD en passant par un stripslashes(). Les commentaires s'affichent parfaitement, et aucun utilisateur ne peut inserer de code html dans ses commentaires, m'evitant ainsi une potentielle attaque. Par contre, je voudrais que les utilisateurs puissent saisir des liens dans leurs commentaires, et la je bloque! :( Ce que je voudrais c'est que lorsque l'utilisateur saisisse www.site.com, que ca apparaisse sous la forme [www.site.com www.site.com].
J'aimerais eviter le javascript dans la mesure du possible, mais si ce n'est pas faisable en php, alors pourquoi pas.

Merci d'avance pour vos reponses.

ps: desole pour les accents, je suis sur un clavier US...

3 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
24 sept. 2008 à 10:44
Salut,

Pour rendre une URL cliquable, il existe de nombreuses sources, qui utilisent notamment les expressions régulières.
http://www.google.fr/search?q=url+cliquable

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
cedman35 Messages postés 2 Date d'inscription vendredi 11 novembre 2005 Statut Membre Dernière intervention 24 septembre 2008
24 sept. 2008 à 10:55
ok, merci.
Ce n'est pas faute d'avoir fait des recherches sur google avant, mais pas avec les bon mots cle ...
pour ceux que ca interesse, j'ai trouve ca comme solution:

<?php

$chaine = preg_replace("((http://|ftp://)?([a-zA-Z1-9\-_\.]+\.[a-zA-Z1-9\-_]+\.[a-z]{2,3}(/[a-z\-/\._\?=&amp;]+)?))", "$2',$texte);

 $texte =
preg_replace('/([^"]|^)((ht|f)tp:\/\/[\w.?\/=%)(+;&amp;-]+)/','$1[$2 $2]',$texte);

ou

sans doute le mieux:

<code><?php

function clicklien($url){ 

$in=array( 

'`(((?:https?|ftp)://\S+)(\s|\z)`', 

'`((?<!//)(www\.)\S+)(\s|\z)`');

$out=array( 

'[$1 $1]&amp;nbsp;', 

'&amp;nbsp;$1&amp;nbsp;');

return preg_replace($in,$out,$url); 

} 

echo clicklien($texte); 

?>

Encore merci
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
24 sept. 2008 à 11:09
Ca arrive de ne pas chercher avec les bons mots clés...
De mon côté, je te remercie pour tes efforts, pour certains, il faut que ça leur tombe tout cuit et prémaché dans la bouche...

Bonne continuation :)

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
Rejoignez-nous