On trouve pas mal de sites qui proposent d'encoder des adresses email pour vous, pour pouvoir faire des liens "mailto" sans que ça passe directement dans le 1er robot venu.
Le "problème" est qu'il n'y a que l'interface, jamais le code qui permet d'encoder l'adresse. Comme j'en avait marre de devoir faire des copier-coller adresse par adresse, j'ai fait ma propre fonction d'encodage, et quitte à faire, autant en faire profiter tout le monde.
Celle-ci est basée sur l'encodage de caractère en décimal et hexadécimal. Pour chaque caractère de l'adresse email, la fonction le code soit en hexa, soit en décimal, soit ne le code pas. Ainsi, on obtient un email avec un codage totalement aléatoire. Comme il n'y a plus de logique directe, cela permet de compliquer fortement la tâche aux robots.
Je me doute bien que certains robots réussiront quand même à passer au travers, mais c'est une des solutions les plus efficaces que j'aie trouvé jusqu'à maintenant (en dehors de passer par un formulaire + captcha, mais ça n'est pas la question ici).
A noter que le mail codé peut être utilisé aussi bien pour le lien mailto que pour l'affichage même de l'adresse email.
Source / Exemple :
function encode_mail($email) {
$mail_encoded = "";
for($i = 0; $i < strlen($email); $i++) {
$alea = rand(1, 300);
switch(($alea % 3)) {
case 0:
$mail_encoded .= "&#".ord($email[$i]).";";
break;
case 1:
$mail_encoded .= "&#x".bin2hex($email[$i]).";";
break;
case 2:
$mail_encoded .= $email[$i];
break;
default:
echo "Error";
break;
}
}
return $mail_encoded;
}
// Exemple d'utilisation :
echo "<a href=\"mailto:".encode_mail($mail)."\">".encode_mail($mail)."</a>";
// Version alternative permettant plus d'aléatoire avec l'ajout des caractères codés en ASCII (notation utilisée pour les URL), mais incompatible pour l'affichage.
function encode_mail2($email) {
$mail_encoded = "";
for($i = 0; $i < strlen($email); $i++) {
$alea = rand(1, 400);
switch(($alea % 4)) {
case 0:
$mail_encoded .= "&#".ord($email[$i]).";";
break;
case 1:
$mail_encoded .= "&#x".bin2hex($email[$i]).";";
break;
case 2:
$mail_encoded .= "%".bin2hex($email[$i])."";
break;
case 3:
$mail_encoded .= $email[$i];
break;
default:
echo "Error";
break;
}
}
return $mail_encoded;
}
Conclusion :
Je suis bien sûr ouvert à toute critique/suggestion (tant que cela reste constructif, cela va de soi).
Profitez-en bien! :-)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.