[PHP]REGEX et liens
Utilisateur anonyme
-
Groarh Messages postés 706 Statut Membre -
Groarh Messages postés 706 Statut Membre -
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 :
Pour l'instant, ma regex resssemble à ça :
et avec preg_replace() :
Merci d'avance pour votre aide ;)
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 ;)
A voir également:
- [PHP]REGEX et liens
- Vérificateur de liens - Guide
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Telecharger liens direct - Accueil - Outils
- Ou trouver les liens copiés sur android - Guide
3 réponses
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 » (https://www.php.net/manual/fr/regexp.reference.assertions.php).
Si je ne m'abuse, ceci devrait marcher :
Tiens-moi au courant ;)
Edit : Je suppose que les [] autour de http sont dûs à la correction automatique de ce forum :S
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 » (https://www.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
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)
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)
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 :
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 ;)
<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 ;)