Page d'accueil | Contact | Plan | Droits d'auteur | Login membres

Visitez quelques sites des membres d'Eklesia.net

Niveau avancé
Remplacer les adresses Mél par une image dans un article SPIP

L’article Remplacer un mot par une image (protection des adresses Mél) montre comment une fonction PHP peut remplacer un mot par une image dans une ligne de texte.

Mais SPIP interdit normalement le placement de fonctions PHP dans le corps d’un article ou d’une brève [1]. La technique utilisée ici consiste à marquer la chaîne à transformer et à faire assurer le codage par un filtre personnel, placé dans « mes_fonctions.php3 »

Utilisation

- 1- Placer dans « mes fonctions.php3 » les 2 fonctions « admail » et « admail2img » (voir le code ci-dessous)
- 2- Dans les squelettes : ajouter le filtre « admail » dans chaque appel de texte (ou de brève). Exemple :         [(#TEXTE|admail)]
- 3- Dans les articles (ou brèves) : placer les adresses entre les marqueurs et £%
ex : %£tartempion@truc.com£% .
Elles sont automatiquement transformées en « images » telles que : %*tartempion chez truc point com*%

(Note : Pour permettre la publication de cet article, le site Eklesia utilise un couple de caractères marqueurs différent du couple ’%£’ présenté ici(.

Remarques

- L’image PNG créée a un fond transparent.
- Vous pouvez ajuster la couleur du texte-image en changeant les paramètres par défaut de la fonction "admail2img"
- La variable $GLOBALS[’doss_images’] spécifie le dossier de stockage des fichiers images.

- $GLOBALS[’doss_images’] = ’./CACHE/’ marche bien dans certaines configurations, mais pas toutes ( ?)
- $GLOBALS[’doss_images’] = ’./IMG/’ semble beaucoup plus universel

et bien sur : vous pouvez compléter l’adresse visible par un lien vers le formulaire de contact d’un auteur, fourni dans la distribution SPIP.
Exemple : Écrivez moi : [%£tartempion@truc.com£%->aut18]

Fichier « mes_fonctions.php3 »


<?php
$GLOBALS['doss_images'] = './IMG/';    // pour fonction 'admail2img'

/* ----------------------------------------------------- function admail ---
PhD 200510029  
 Filtre SPIP, repère les adresses mails marquées par %£ .....£%,
 crée le fichier image correspondant et remplace l'adresse par l'appel HTML
 à cette image.
       
 Utilise la fonction "admail2img"
*/
function admail ($text) {

// Met en tableau les différentes parties du texte (hors marqueurs, marqueur début,
// entre marqueurs, marqueur fin)
 $tab = preg_split ('((\%\*|\*\%))', $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
       
// traitement de chaque partie, composition du texte résultat
 $newtext ="";
 $k=0;
 foreach ($tab as $str) {
   switch ($str) {         //
     case "%£" :
       $k = 1;
       break;
    case "£%" :
       $k = 0;
       break;
   default :
     if ($k) {
       $newtext .= admail2img ($str);
     } else {
       $newtext .= $str;
     }
   }
 }
 return $newtext;
}

/* ----------------------------------------------- function admail2img ---
Origine : http://www.puremango.co.uk
PhD 200510029 :
 Tranformation en fonction,
 Suppression du codage base64, inutile dans cette configuration
 Résultat :
   - création d'un fichier image
   - retourne appel HTML de ce fichier

Exemple :
Remplacer les références aux adresses mail par
 <?php echo admail2img('monadressemail@fournisseur.com');  ?>
       
Arguments :
1 : obligatoire - chaine de caractères à transformer
2, 3, 4 : $r, $g, $b - couleurs optionnelles
*/

function admail2img($text, $r=0, $g=0, $b=255) {
       
 // calculate required width and height of image
 $pic_width = strlen($text)*7;
 $pic_height = 12;
 
 // create image
 $pic = ImageCreate($pic_width+1,$pic_height+1);
 
 // allocate colours
 $trans_temp = ImageColorAllocate($pic,254,254,254);
 $transparent = ImageColorTransparent($pic,$trans_temp);
 $user = ImageColorAllocate($pic,intval($r),intval($g),intval($b));
 
 // transparent fill for background
 ImageFilledRectangle($pic,0,0,$pic_width,$pic_height,$trans_temp);
 
 // draw text
 ImageString($pic,3,0,1,$text,$user);
 
 // output image
 $filename =  $GLOBALS['doss_images'].sprintf('%08X',crc32($text)).'.png';
 ImagePNG($pic, $filename);
 
 // remove image from memory
 ImageDestroy($pic);
   
 return "<img src='". $filename."'>";
}
?>

Cas particulier :

Si vous voulez utiliser également la fonction « admail2img » dans du code PHP en dehors d’un article SPIP, il y a quelques problèmes liés à la façon dont le moteur SPIP utilise le fichier « mes_fonctions.php3 ». La méthode la plus sure est :
- de placer la fonction « admail2img » dans un fichier du type "utilitaires_inc.php" que vous utilisez par un appel include_once("utilitaires_inc.php")
- de ne mettre dans "mes_fonctions.php3" que la fonction "admail" accompagnée d’un appel include_once("utilitaires_inc.php")
(Le “_once“ est indispensable !)

[1] voir à ce sujet l’article "Inclure un script PHP dans un article" de Jim Wanderscheid