Téléchargement
illégal
Posez votre question Signaler

[PHP]REGEX et liens

sonik21 1054Messages postés 17 novembre 2007Date d'inscription 11 décembre 2011Dernière intervention - Dernière réponse le 17 août 2009 à 01:44
Bonjour,
j'ai un problème avec une regex me permettant de transformer les liens rentrés sous la forme "http://www.site.com/" vers un "<a href="http://www.site.com/">http://www.site.com/</a>" .
En fait, le problème de cette transformation est résolu, mais le problème est que la regex me transforme aussi les liens qui sont rentré sous la forme "<a href="http://www.site.com/">http://www.site.com/</a>", donc à la fin je me retrouve avec quelque chose comme ça :
http://www.site.com/">Nom du site

Pour l'instant, ma regex resssemble à ça :
#[http://][a-z0-9._/-]+#i

et avec preg_replace() :
$text = preg_replace('#[http://][a-z0-9._/-]+#i', '<a href="$0">$0</a>', $text);

Merci d'avance pour votre aide ;)
Lire la suite 

[PHP]REGEX et liens »

3 réponses
Réponse
+0
moins plus
Salut !
Dans ta Regexp il s'agit de regarder si la chaîne concernée n'est pas précédée de (au moins) « href=" » pour la partie intérieure au tag, et de « > »pour la partie encadrée. Ça ressemble bigrement au principe des « assertions » (http://fr.php.net/manual/fr/regexp.reference.assertions.php).

Si je ne m'abuse, ceci devrait marcher :
$text = preg_replace('#(?<!href=")(?<!>)http://[a-z0-9._/-]+#i', '<a href="$0">$0</a>', $text);


Tiens-moi au courant ;)

Edit : Je suppose que les [] autour de http sont dûs à la correction automatique de ce forum :S
Ajouter un commentaire
Réponse
+0
moins plus
Merci beaucoup Groarh !!
Ca fonctionne super comme ça :)

(merci pour le lien sur php.net, je ne savaient pas ce qu'était les assertions)

(Les crochets sont bien dûs à la correction automatique du forum)
Ajouter un commentaire
Réponse
+0
moins plus
Attention, la regex que je t'ai donnée n'est pas parfaite. S'il y a des caractères entre l'adresse et la balise de gauche, ça ne marchera pas, par exemple avec ça :
<a href="http://example.com/"> http://example.com/</a> (il y a un espace)

Il y a moyen de filtrer ça mais ça va faire une regex beaucoup plus longue. Il s'agit de gérer (c'est rare, mais possible) des liens postés avec déjà leurs balises, qui commencent par http, et qui ont des caractères au mauvais endroit…
Si tu y tiens je te la fais ;)
Ajouter un commentaire
Ce document intitulé « [PHP]REGEX et liens » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?