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

Visitez quelques sites des membres d'Eklesia.net

Niveau expert
Anti-SPAM avec SPIP et Javascript

Pour empêcher les robots à capturer des adresses de courrier électronique de vos sites, rien ne vaut le codage avec un Javascript que vous seul maîtrisez. SPIP peut nous aider à coder ces adresses automatiquement.

Le but est de faire afficher une adresse de courrier électronique dans un texte, affichage réalisé avec le "document.write" de Javascript. Le lien doit transmettre l’adresse coupée en 3 morceaux à une fonction Javascript qui recolle les morceaux et lance la messagerie.

Regardons la procédure :

1. Rajouter des fonctions Javascript dans l’entête

Dans le squelette de vos articles, rajoutez ceci dans la balise <head></head> :

<script type="text/javascript">
function envoiMail(a, b, c) {
  MailWindow = window.open("mailto:" + a + "@" + b + "." + c);
  if(MailWindow != null) {
     MailWindow.close();
  }
}
function declareEtatMail(a, b, c) {
  status = "mailto:" + a + "@" + b + "." + c;
}
</script>

2. Email provenant d’une boucle SPIP

Nous avons besoin de récupérer l’adresse de courrier électronique dans une variable PHP pour pouvoir la transformer.

Une expression régulière coupe l’adresse en trois morceaux (séparation sur le @ et un des points).

L’adresse est remplacée par le Javascript nécessaire et affichée dans le squelette.

<BOUCLE_auteurs(AUTEURS) {id_article}>
<?php
$email='[(#EMAIL|texte_script)]';
$cherche = "/([0-9A-Za-z_.-]+)+@([0-9A-Za-z_-]+)+.([0-9A-Za-z_.-]+)/";
$remplace = "<a onmouseout=\"status=''; return true;\" onmouseover=\"declareEtatMail('\$1','\$2','\$3'); return true;\" href=\"javascript:envoiMail('\$1','\$2','\$3')\">\$1 chez \$2 point \$3</a>";
$email = preg_replace($cherche, $remplace, $email);
echo($email);
?>
</BOUCLE_auteurs>

3. Email provenant d’un texte

Si ce n’est déjà fait, créez un fichier texte avec comme nom "mes_fonctions.php" et placez-le dans le répertoire /ecrire de votre site. Le moteur SPIP reconnait ce nom de fichier et va exécuter les fonctions PHP qui s’y trouvent.

Créez dans ce fichier la fonction "apres_propre". Une fonction qui porte ce nom sera reconnue par le moteur SPIP et exécutée avant l’affichage du code HTML final.

function apres_propre($texte) {
  return($texte);
}

Le texte de l’article se trouve dans la variable $texte soumise à la fonction. Et avant de retourner la variable $texte au moteur SPIP, cherchons les emails écrits avec les raccourcis typographiques de SPIP et transformons-les en Javascript à coup d’expression régulière, avant de sauvegarder de nouveau dans la variable $texte :

$cherche = "/<a href=\"mailto:([0-9A-Za-z_.-]+)@([0-9A-Za-z_-]+).([0-9A-Za-z_.-]+)\"/";
$remplace = "<a onmouseout=\"status=''; return true;\" onmouseover=\"declareEtatMail('\${1}','\${2}','\${3}'); return true;\" href=\"javascript:envoiMail('\${1}','\${2}','\${3}')\"";
$texte = preg_replace($cherche, $remplace, $texte);

Nous avons maintenant codé le lien "mailto:" qui lance le client de messagerie, mais il reste encore (éventuellement) des adresses de courrier électronique sans lien quelque part dans le texte. Voici comment coder ces adresses :

$cherche = "/([0-9A-Za-z_.-]+)@([0-9A-Za-z_-]+).([0-9A-Za-z_.-]+)/";
$remplace = "\${1} chez \${2} point \${3}";
$texte = preg_replace($cherche, $remplace, $texte);

Fonction complète

Ci-dessous, le script complet pour le fichier mes_fonctions.php3 :

function apres_propre($texte) {

$cherche = "/<a href=\"mailto:([0-9A-Za-z_.-]+)@([0-9A-Za-z_-]+).([0-9A-Za-z_.-]+)\"/";
$remplace = "<a onmouseout=\"status=''; return true;\" onmouseover=\"declareEtatMail('\${1}','\${2}','\${3}'); return true;\" href=\"javascript:envoiMail('\${1}','\${2}','\${3}')\"";
$texte = preg_replace($cherche, $remplace, $texte);

$cherche = "/([0-9A-Za-z_.-]+)@([0-9A-Za-z_-]+).([0-9A-Za-z_.-]+)/";
$remplace = "\${1} chez \${2} point \${3}";
$texte = preg_replace($cherche, $remplace, $texte);

return($texte);

}
P.S.
Compatibilité : SPIP 1.9.x