Regex pour changer URL

Eléphant du PHP | 75 Messages

24 mars 2010, 19:01

Bonjour,

Voilà, j'ai une variable $contenu qui contient le texte rédigé par le membre. Dedans figure des url. J'aimerais que ces url par exemple www.google.fr soit automatiquement transformé en <a href="www.google.fr">www.google.fr</a>

Voilà le code :
<?php
	$test = 'oikrhjoirehjphj www.google.fr ojprohjj www.siteduzero.com';	
	
	echo 'Ancien :<br />'.$test;
	echo '<br /><br />Nouveau :<br />'.preg_replace('#www.[a-zA-Z.]+#', '<a href="http://$0" class="url" style="color:red;">$0</a>', $test);
?>
Cependant, quand l'url contient un - par exemple www.google-test.fr là ca ne fonctionne plus. :/

Si quelqu'un sait comment régler le problème. :)

Eléphant du PHP | 75 Messages

24 mars 2010, 23:52

J'ai trouvé une solution pour les tirets :

$contenu = preg_replace('#www.[a-zA-Z+-.]+#', '<a href="http://$0" class="url">http://$0</a>', $contenu);

Sauf que maintenant, il me faut les / en plus. Donc j'ai pensé rajouter +/ avec le -. Ca marche, les / sont reconnus, mais plus les tirets.

Je fais comment pour mettre deux + à la suite ?

Eléphant du PHP | 75 Messages

26 mars 2010, 19:24

Problème résolu => $contenu = preg_replace('#www.[a-zA-Z\-\/.]+#', '<a href="http://$0" class="url">http://$0</a>', $contenu);

Mammouth du PHP | 985 Messages

26 mars 2010, 21:08

tu peux aussi tester cette reg :) :

Code : Tout sélectionner

'#www\.[a-zA-Z0-9]+([-.][a-zA-Z0-9]+)*\.[a-zA-Z]{2,4}(\/\w+(-\w+)?\/)*(\/)?#'
(Mais elle ne gère pas non plus les query strings)
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.