Experiencias de un programador curioso del SEO
Proteger emails de los robots mediante javascript y c#
En este articulo os hablare de como proteger emails de los robots de spam mediante javascript en c#, muchas veces nos vemos obligados a mostrar direcciones de correo electronico en nustras páginas con el riesgo de que esas cuentas caigan en manos de robots spammers y colapsar dichas cuentas de emails de publicidad no deseada. A continuación os dejo una función en c# que sustituira los emails por códigos en javascript que los robots no serán capaces de descifrar:
Función en C# para proteger emails de los robots mediante javascript
/// <summary>
/// Función que devuelve un script para proteger un email de los robots
/// </summary>
/// <param name="email">Email a proteger</param>
/// <returns></returns>
public static string HideEmail(string email)
{
string script;
string character_set = "+-.0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";
string key = ShuffleWord(character_set); //Reordena character_set aleatoriamente
string cipher_text = "";
Random rnd = new Random();
string id = rnd.Next().ToString();
for (int i=0;i<email.Length;i++)
{
cipher_text += key[character_set.IndexOf(email[i])];
}
script = string.Format("var a=\"{0}\";\nvar b=a.split(\"\").sort().join(\"\");\nvar c=\"{1}\";var d=\"\";\nfor(var e=0;e<c.length;e++)d+=b.charAt(a.indexOf(c.charAt(e)));\ndocument.getElementById(\"{2}\").innerHTML=\"<a href='mailto:'\" + d + \"'>\" + d + \"</a>\";",key,cipher_text,id);
script = "<script type=\"text/javascript\">\n/*<![CDATA[*/" + script + "/*]]>*/\n</script>";
return "<span id='" + id + "'>\n[email protegido mediante javascript]\n</span>\n" + script;
}
/// <summary>
/// Función que reordena un string de forma aleatoria
/// </summary>
/// <param name="s">Cadena a reordenar</param>
/// <returns></returns>
public static string ShuffleWord(string s)
{
Random r = new Random((int)(new TimeSpan()).Ticks);
System.Collections.ArrayList arl = new System.Collections.ArrayList();
string strFinal = String.Empty;
int temp = 0;
if (s.Length > 2)
{
for (int i = 1; i < s.Length - 1; i++)
{
arl.Add(i);
}
for (int c = 1; c < s.Length -1 ; c++)
{
temp = r.Next(arl.Count);
strFinal += s[(int)arl[temp]].ToString();
arl.RemoveAt(temp);
}
strFinal = s[0] + strFinal + s[s.Length-1];
return strFinal;
}
return s;
}
Código html resultante
<span id='1344355154'>
[email protegido mediante javascript]
</span>
<script type="text/javascript">
/*<![CDATA[*/var a="+hnjV@WtNxDFQaPy.pwbEkmv0_RrZO27KBuXe-HGqMd4AofCL58SgYJ6liUsTI1c93z";
var b=a.split("").sort().join("");
var c="36SosoaCYM5gn46Y";var d="";
for(var e=0;e<c.length;e++)d+=b.charAt(a.indexOf(c.charAt(e)));
document.getElementById("1344355154").innerHTML="<a href='mailto:'" + d + "'>" + d + "</a>";/*]]>*/
</script>
Como siempre para vuestra comodidad tambien os la dejo disponible en pastebin.
| Imprimir artículo | Este artículo fue publicado por jmnieves el febrero 1, 2010 a las 10:50 am, y está archivado en .NET. Sigue las respuestas a esta entrada a través de RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio. |