Para evitar el spam, hay muchas maneras de ocultar el email en una página html. Una de las más efectiva podrÃa ser crear una imagen con la dirección como tengo puesto en mi página de contacto:
. Puedes crear esta imagen con el photoshop o desde alguna utilidad externa como esta.
Sin embargo, puede que estemos desarrollando una aplicación en Java y tengamos un listado de usuarios público con sus emails. Crear una imagen para cada uno de ellos podrÃa ser muy laborioso, y escribir el email sin ofuscar u ocultar podrÃa ser peligroso.
Obviando los trucos de poner los emails con el formato “nombre ARROBA dominio PUNTO es” o “email@[QUITAESTO]dominio.es” podemos escribir cada carácter ASCII de nuestro email uno por uno en hexadecimal o decimal. Para esto, utilizaremos las entidades html con este formato:
- &#D; siendo D el número del código ASCII en decimal
- &#xH; siendo H el número del código ASCII en hexadecimal
Por ejemplo, para pintar la letra a, cuyo código ASCII es 97 en decimal y 61 en hexadecimal podemos utilizar a o a
(Una tabla completa con todos los caracteres ASCII aqui)
Bueno, ahora lo que queremos es escribir nuestros emails codificados en decimal y hexadecimal. Para eso utilizaremos esta clase Java:
public class HtmlCoder {
public static final Random r = new Random(System.currentTimeMillis());
public static String randomHtmlEncode(String data) {
if (data == null || data.length() == 0) return data;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < data.length(); i++) {
switch (r.nextInt(3)) {
case 0 : // En decimal
sb.append("").append((int)data.charAt(i)).append(";");
break;
case 1 : // En hexadecimal
sb.append("").append(Integer.toHexString(data.charAt(i))).append(";");
break;
case 2 : // Tal cual
sb.append(data.charAt(i));
}
}
return sb.toString();
}
}
Esta clase crea un texto codificando cada carácter en su equivalente ascii en decimal, hexadecimal o sin codificar de manera aleatoria. De esta manera, un email se quedarÃa asÃ: soypicapica@yahoo.es