picture picture
juin 29, 2006 PHP 3 Commentaires

PHP : Rendre cliquable les URL d’un texte saisi dans un textarea de formulaire

bonus : une fonction qui inverse les effets de HTMLentities() !

Si vous avez des champs de saisie pour les visiteurs de votre site, il peut etre interessant de rendre cliquables les URL saisies par vos visiteurs avant de les afficher.

L’astuce consiste à :

  • mettre le texte au format HTML : fontion HTMLentities()
  • remplacer les & par des é pour localiser les liens saisis par le visiteur : fonction str_replace()
  • utiliser les regex sur le texte pour remplacer les URL par <a href="url"> url </a> (à condition d’avoir peu de texte a « mouliner » sur la même page, ces petites bêtes sont gourmandes en ressources et les temps d’affichage peuvent s’en ressentir) : fonction url2lien()

Le problème est ensuite de créer une fonction inverse à HTMLentities(), puisque celle ci n’existe pas nativement avec PHP4, pour le cas ou votre visiteur a saisi du code HTML pour mettre en forme son message.
On va donc creer un tableau avec les valeurs de la fonction, et remplacer à l’inverse les entitées HTML : fonction bak_htmlentities() :)

Le code :

function url2lien($texte) {

// mettre le texte au format HTML
$texte = htmlentities($texte);

// On remplace les "&" par un caractère accentué
$texte = str_replace("&", "é", $texte);

// Ensuite, regexp pour créer les liens cliquables
$texte = eregi_replace( "( http|mailto|news|ftp|https)://(([-éa-z0-9\/\.\?_=@:~])*)", "<a href=\"\\1://\\2\">\\1://\\2</a>", $texte );

// Enfin on renvoit le texte en remettant leurs "&"
return str_replace("é", "&", $texte);
}

// fonction inverse de HTML entities
function bak_htmlentities($texte) {
$tmp = get_html_translation_table(HTML_ENTITIES);
$tmp = array_flip ($tmp);
$texteTmp = strtr ($texte, $tmp);

return $texteTmp;
}

// on enleve les slashes (si votre champ a été inséré au passage dans une base MySQL par exemple), puis on rend les url cliquables et enfin on remet les balises HTML du départ
// url cliquables dans le champ textarea "name = description" par exemple :
$description = bak_htmlentities(url2lien(stripslashes($description)));

8)

3 Responses to “PHP : Rendre cliquable les URL d’un texte saisi dans un textarea de formulaire”

3 Commentaires

  1. myz-rix dit :

    super sympa le reg ;) ça marche du feu de dieu
    merci merci a toi

  2. spynenetwa dit :

    bande de bouffons :]

  3. Web Tolosa dit :

    bien vu, Frank ;)

Commentaire

Name

Mail (ne sera pas publié)

Website

Laisser ces deux champs tels quels :
:D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: