Euh oui, j'ai justement bien regardé, et quand je voyais ce que tu passais en argument, ça me laissait perplexe.
Parce que tu dis justement que www.lesouterrain.com devient <a href="..... ">....</a>, mais le premier argument que tu asses à ta fonction mkurl est :
<br><br><br> www.test.com http://www.lesouterrain.com wwwowww test.12@lesouterrain.com irc://irc.dal.net:6667/yo?ya <a href="http://www.lesouterain.com" target="_blank"> www.lesouterrain.com</a>
Excuse-moi de me perdre dans cette chaine : je ne sais pas ce que tu dois transformer dans tout ça...
Et je te demandais pas un exemple, mais une description précise de ce que tu veux faire. Parce que justement, ton exemple...
Bref...
Si tu veux simplement transformer un www.domaine.tld en html cliquable avec un attribut target, c'est pas très très compliqué. Ton problème de transformation d'adresse déjà mise en forme, j'avais bien compris : il est du à une mauvaise utilisation des expression régulières, et au fait que tu n'utilises pas la bonne fonction pour ça.
Essaie ça :
function mkurl($sText, $mailto = false, $irc=false) {
$search = array('`\s(?:http://|(www\.))([^\s]+)`i');
$replace = array('<a href="http://$1$2" target="_blank">$1$2</a>');
if ($mailto) {
$search[] ='`([\w\.\-_]{2,}@(?:[\w-]{2,}\.)+[\w]{2,}\s)`i';
$replace[] = '<a href="mailto:$1">$1</a>';
}
if ($irc) {
$search[] = '`irc://([\w\.-]+\.[a-z]{2,}(?:\:[0-9]{1,5})?)`i';
$replace[] = '<a href="irc://$1">$1</a>';
}
return preg_replace($search, $replace, $sText);
}
Je n'ai pas fait de tests approfondis, donc je ne sais pas si c'est ce qu'il y a de plus efficace et de moins consommateur en ressources.
A priori ça marche. Y compris sur les URL accentuées.
Ca doit chopper les url comme celles-ci :
www.mondomaine.tld
http://sous.domaine.tld
http://sous.domaine.tres.loin.en.dessous.tld
www.mon.super.domaine.que.j-en.suis.trop.fier.tld
www.fier.d.être.geek.tld
Mais pas :
www.mon.domaine.invalide-tld
Pour les mails, ça capture :
mon.email@domaine.tld
mon.email@mon.super.domaine.que.j-en.suis.trop.content.tld
em@il.com
Mais pas :
mon.email@i.com
mon.email@domaine.invalide-tld
Pour les liens irc, ça capture :
irc://mon.serveur.tld:12345
irc://mon.serveur.tld
Mais pas :
irc://mon.s:12345
irc://mon.s-rv
Les PCRE ne sont peut-être pas parfaites, elles laissent peut-être passer des trucs qu'elles ne devraient pas, ou l'inverse...
Pour des explications sur les PCRE :
- http://fr.php.net/manual/fr/book.pcre.php
- http://fr.php.net/manual/fr/reference.pcre.pattern.syntax.php
- http://www.lumadis.be/regex/tuto_pcre.php
Neige
N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...