Bonjour,
Suite à vos remarques concernant l’article Crypter du texte, un email, une URL, j’ai bricolé une nouveau filtre pour crypter les emails non plus isolés mais inclus au dans le corps du texte des articles ou autres éléments d’un site SPIP.
Par soucis de clarté dans les noms, l’ancienne fonction qui fonctionne seulement sur les mails isolés a été renommée, la voici à nouveau présentée.
Crypter un mail isolé
function cryptemail($textemail)
{
$s="";
for ($i=0;$i<strlen($textemail);$i++) {
$s.="&#".ord($textemail{$i}).";";
}
return $s;
}
Exemple d’usage
<a href="mailto:[(#EMAIL|cryptemail)]">Ecrire à l'auteur</a>
Crypter les adresses emails intégrées dans des textes
Cette nouvelle fonctionnalité utilise un nouveau filtre cryptemail_txt.
function cryptemail_txt($texte) {
while (strpos($texte,"mailto:") > 0) {
$debemail = strpos($texte,"mailto:");
$finemail = strpos($texte,'"',$debemail);
$finemail2 = strpos($texte,'?',$debemail); // test la fin de l'adresse et le début des paramètres
if ($finemail2 > 1){
$finemail = min($finemail,$finemail2);
}
$textemail = substr($texte,$debemail,$finemail-$debemail);
$s= cryptemail($textemail);
$texte = ereg_replace($textemail, $s, $texte);
}
return $texte;
}
Comment fonctionne-t-il ?
Il recherche la chaine « mailto: » et crypte tout ce qui suit jusqu’au premier ".
Comment l’utiliser ?
- Copiez-collez les 2 extraits de code ci-dessus dans votre fichier mes_fonctions.php3 (entre une balise
<?php
et une balise?>
).
- Dans votre squelette, utilisez le filtre de la manière suivante :(#TEXTE
Exemple d’usage
(#TEXTE par (#LESAUTEURS
Discussions par date d’activité
9 discussions
Truc chelou :
Si je n’ai pas indiqué de lien mailto dans mon texte d’article, spip génère l’erreur suivante :
Fatal error : Call to undefined function : cryptemail_txt() in c :\program files\easyphp1-8\www\armenie\ecrire\public\composer.php(48) : eval()’d code on line 415
Quelqu’un a une idée de l’origine du problème ?
Bon ok, après vingt minutes de recherches, je m’aperçois qu’il existe déjà un antispam dans spip. Il faut l’activer en ajoutant $activer_antispam = true ; dans mes_options
J’ai donc retiré cryptemail, mais c’est quand même hallucinant que cette fonctionnalité intégrée à spip ne soit pas renseignée dans la doc ...
Répondre à ce message
Apparement, cryptemail_txt n’aime pas la présence de « ? ».
Je voulais utiliser dans un article un lien du type mail
Tout ce que j’obtiens, c’est :
Fatal error : Maximum execution time of 30 seconds exceeded in /var/www/free.fr/1/c/cspcovtt/mes_fonctions.php3 on line 31
La ligne 31 de mes_fonctions.php3 correspond à
$texte = ereg_replace($textemail, $s, $texte) ;
dans la fonction cryptemail_txt($texte)
J’ai vérifié que la longueur de l’article n’était pas la cause de ce timeout : il me suffit de supprimer le « ? » pour que ma page apparaisse normalement.
Une idée pour corriger ce problème ?
François
La correction du problème...
tester en plus si l’email comprend un point d’interrogation...
Bonjour,
Juste une petite précision. Faut il copier le code dans toutes les pages contenant l’email ou peut on le placer dans une page générale et renvoyer dessus ? Dans ce cas là, dans quelle page et quel est le code à rajoutter ?
Merci par avance
Je ne sais pas pq, spip a rajoutté au sujet de mon message le mot « bogue ».
Ce n’était pas du tout mon attention d’apporter la moindre critique sur cette contrib qui d’après les post est très utile par les temps qui courent...
Copiez le script dans le fichier mes_fonctions.php3
et utilisez le filtre dans vos squelettes
Répondre à ce message
salut,
malhereusement j’obtiens je message :
Fatal error : Call to undefined function : cryptemail() in /home/cranio/public_html/mes_fonctions.php3 on line 45
pouvez-vous m’aider, svp ?
Francesco
ops, j’ai oublié de copier le premier script...pardon .-P
Répondre à ce message
ce filtre fonctionne bien, mais pose un problème lorsqu’on veut utiliser un lien html un peu élaboré, sans passer par les raccourcis SPIP.
par exemple, si j’écris :
le serveur va mouliner et rien ne s’affichera.
Est-il possible d’améliorer le filtre pour prendre en compte ce genre de requête ? Par exemple : ne pas ’filtrer’ tout ce qui vient après un point d’interrogation ? en effet, ça ne sert à rien de filtrer cette partie là.
Note : je ne connais pas PHP, je ne peux pas vous aider.
regarde un peu plus bas et tu verras la soluce...
dans la fonction :
function cryptemail_txt($texte)
Répondre à ce message
Un seul mot : Génial !
Non, un deuxième : merci.
Répondre à ce message
En tout point excellent ce filtre !
Dans l’éducation nationale, on recherche les moyens de protéger des spams les collègues et les élèves
Merci !!
Répondre à ce message
Je ne sais pas si j’ai merdé quelque part, mais l’adresse d’envoi pour les emails isolés dans un forum est du type (adresseemail
Répondre à ce message
voir aussi Un formulaire permettant l’envoi d’un email
Répondre à ce message
Très bien ce filtre ! Adopté !
Petite chose « amusante » (sous Mozilla) lorsque l’on sélectionne juste quelques caractères avant et après un « mailto » passer à ce filtre, et qu’on en sort le code source : pas de cryptage. Contrairement à une requête de code source sur une page entière !!
Eh ben oui ! au premier essai j’ai fait : mais euh ... marche pas ! Alors que ... !
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |