C'est rare que je demande de l'aide pour des regexp, mais là, après moultes essais, je n'y arrives plus...
Tout qu'est-ce que je souhaite?
Transformer les urls (avec ou sans protocole, d'où le callback), en lien cliquable Si et Seulement Si (SSI pour les intimes) le lien n'est pas déjà créer (donc hors balises <a...></a>).
Le code ci-dessous fait tout sauf le coup d'éviter les liens déjà transformés... (y a peut-être d'autres coquilles mais je pense pouvoir les régler, ça me parait moins difficile)
Voilà je sais pas si c'est faisable en une seule regexp ou s'il faut imbriquer les callback...
Tout vos avis sont les bienvenus!
<?php
$txt='bla bla www.machin.com
bla http://machin.com
machin.com
http://www.machin.com
<a href="http://www.truc.com">http://www.truc.com</a>
<a href="">truc.2com</a>';
$replace=preg_replace_callback(
"'
(
((http|ftp|https)://)? #différents protocoles
(
([a-zA-Z0-9-]+\.)? #Sous-domaines
[a-zA-Z0-9-]+ #nom de domaine
\.[a-z]{2,4} #tld
(/[a-zA-Z0-9_.-]+)* #dossiers
([a-zA-Z0-9_.-]\.[a-z]{2,5})? #fichier + extension
)
)
'",
create_function(
'$matches',
'$deb=strpos($matches[0],"//")!==false ? "": "http://";
return "<a href=\"".$deb.$matches[0]."\" title=\"".$matches[0]."\">".$matches[0]."</a>$matches[0]";'
),
$txt
);
Merci d'avance!!!