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 !)
Philippe DENOYELLE - Ingénieur, retraité actif...
J’ai tenu pendant 7 ans le site internet des Guides de France, puis participé au lancement des sites Scouts et Guides de France. maintenant je reste responsable du site "Mélan-Feux Nouveaux" merveilleux lieu de rencontre de l’association (Alpes de haute Provence)
J’ai monté bien sur le site de ma paroisse grenobloise...
(À part cela, je suis responsable des sites et serveurs de l’ACONIT : Association pour un conservatoire de l’informatique et de la télématique.)
pdenoyelle chez mac point com