Introduction
Cette modification permet de coder automatiquement les adresses email contenues dans le Wiki en hexadécimal. Pour éviter qu'elles soient récupérées par des collecteurs d'adresses qui servent au spam.
Le script utilisé pour l'encodage est celui de
Neokraft :
http://www.neokraft.net/sottises/mailencoder/
Attention, toutefois, l'adresse email reste en clair dans le fichier source, si la page est modifiable par tous, probable que les collecteurs d'adresses suivent le lien de modification et pourront récupérer l'adresse quand même.
Vos suggestions sont les bienvenues
Modifications
La modification n'est pas complexe mais nécessite de comprendre le code source de
WikiNi. Si ça ne pose pas de problème particulier, il sera peut-être judicieux de l'ajouter au code source directement. En proposant peut-être une balise pour préciser qu'on veut encoder l'email (pour ceux qui n'aimerait pas cette fonctionnalité)
Tout ce qui doit être modifié se trouve dans le fichier /formatters/wakka.php
Après le premier test :
if (!function_exists("wakka2callback"))
{
- function wakka2callback($things)
On ajoute la fonction d'encodage. C'est un peu en vrac, mais vu sa taille très réduite et son utilité juste dans ce fichier, ça convient.
if (!function_exists("wakka2callback"))
{
- // encodage hexadecimal des adresses email
- function hex_encode ($str)
- {
- $encoded = bin2hex($str);
- $encoded = chunk_split($encoded, 2, '%');
- $encoded = '%'.substr($encoded, 0, strlen($encoded) - 1);
- return $encoded;
- }
- function wakka2callback($things)
Plus bas, entre tous les tests
- // escaped text
- else if (preg_match("/^\"\"(.*)\"\"$/s", $thing, $matches))
- {
- }
on ajoute le code suivant qui permet d'encoder les adresses email et de créer le lien.
- // email à encoder
- else if (preg_match("([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z]+)+)", $thing, $matches))
- {
- return '<a href="mailto:'.hex_encode($thing).'">'.preg_replace("(@)", "-AT-", $thing).'</a>';
Enfin, tout en bas, à la ligne :
$text = preg_replace_callback(
"/(\%\%.*?\%\%|".
"\"\".*?\"\"|".
"\[\[.*?\]\]|".
"\b[[:lower:]]+:\/\/\S+|".
"\*\*|\#\#|@@|££|__|<|>|\/\/|".
"======|=====|====|===|==|".
"-{4,}|---|".
"\n(\t+|([ ]{1})+)(-|[[:alnum:]]+\))?|".
"^(\t+|([ ]{1})+)(-|[[:alnum:]]+\))?|".
"\{\{.*?\}\}|".
"\b".WN_UPPER.WN_CHAR."+[:](".WN_CHAR2."*)\b|".
"\b(".WN_UPPER.WN_LOWER."+".WN_UPPER_NUM.WN_CHAR."*)\b|".
"\n)/ms", "wakka2callback", $text);
on insère entre deux tests la ligne :
- "([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z]+)+)|".
On obtient :
$text = preg_replace_callback(
"/(\%\%.*?\%\%|".
"\"\".*?\"\"|".
"\[\[.*?\]\]|".
"\b[[:lower:]]+:\/\/\S+|".
"\*\*|\#\#|@@|££|__|<|>|\/\/|".
"======|=====|====|===|==|".
"([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z]+)+)|".
"-{4,}|---|".
"\n(\t+|([ ]{1})+)(-|[[:alnum:]]+\))?|".
"^(\t+|([ ]{1})+)(-|[[:alnum:]]+\))?|".
"\{\{.*?\}\}|".
"\b".WN_UPPER.WN_CHAR."+[:](".WN_CHAR2."*)\b|".
"\b(".WN_UPPER.WN_LOWER."+".WN_UPPER_NUM.WN_CHAR."*)\b|".
"\n)/ms", "wakka2callback", $text);