02 Septiembre


Función para enmascarar un email y evitar spam

Si hay algo que todos los desarrolladores hacen diferente es la forma de enmascarar un email para evitar el spam. 

La gran variedad de formas es consecuencia de que cada vez que hay un algoritmo que parece ser la solución de todo, siempre hay alguien que hace un bot que lo aplica alrevés y de nuevo estamos en cero.

En este caso que comparto hoy se trata de un hack que hice basado en la función safe_emailto() del url helper de CodeIgniter.

La razón por la que uso más a menudo este hack es que el safe_emailto() es como su nombre lo indica, un MAILTO y lleva como parámetros no sólo el email sino también el texto a desplegar en el link. Con esta nueva función se elimina el MAILTO y simplemente se devuelve el email ofuscado en un simple texto que se puede incluir en cualquier etiqueta html.

La forma de usar es simple, sólo le pasamos el email que queremos enmascarar como parámetro a la función de la siguiente manera:

safe_email('me@mywebsite.com');

Un ejemplo de cómo usarlo en un html:

<p><? safe_email('me@mywebsite.com') =?></p>

Este es el enlace directo al GitHub 

Y aquí el código:

function safe_email($email) {

	for ($i = 0; $i < strlen($email); $i++)
	{
		$x[] = "|".ord(substr($email, $i, 1));
	}

	$x = array_reverse($x);
	ob_start();
	?>
	<script type="text/javascript">
	//<![CDATA[
	var l=new Array();
	<?php
	$i = 0;
	foreach ($x as $val){ ?>l[<?php echo $i++; ?>]='<?php echo $val; ?>';<?php } ?>

	for (var i = l.length-1; i >= 0; i=i-1){
	if (l[i].substring(0, 1) == '|') document.write("&#"+unescape(l[i].substring(1))+";");
	else document.write(unescape(l[i]));}
	//]]>
	</script>
	<?php

		$buffer = ob_get_contents();
		ob_end_clean();
		return $buffer;
	}

 


Artículos Relacionados