Categoría: Scripts

Existen muchas formas de colorear automáticamente el código fuente de un lenguaje de programación para que adquiera una sintaxis mucho más amigable.

Colorear Sintaxis

Como ya imaginarás, es importante mejorar la apariencia monocromática de un script que pretendes mostrar a tus lectores, ya que podrán diferenciar con facilidad las distintas partes del código y comprenderlo mejor.




Colorear Sintaxis con PHP


Existe una función PHP que es capaz de colorear la sintaxis de un código escrito en PHP e incluso identarlo automáticamente, hablo de la función highlight_string.

Ejemplo:


<?
$string 
"<? echo 'Hola Mundo'; ?>";
echo 
highlight_string ($stringtrue);
?>

Resultado:


<?
echo 'Hola Mundo';
?>



Plugin WordPress para colorear Sintaxis


Para los que utilicen WordPress como CMS (Gestor de contenidos) para su blog, pueden usar este sencillo plugin.

El autor indica que para utilizarlo, debes colocar el código que quieras colorear, dentro de las etiquetas <pre lang="LANGUAGE"> y </pre>

Ejemplo:

<pre lang="php"><? echo 'Hola Mundo'?></pre>

Como ves he sustituido LANGUAGE por el lenguaje de programación al que quiero colorear su sintaxis, en este caso php.




Colorear Sintaxis de un código online


Para el que no quiera molestarse demasiado en descargar un plugin o usar una función, siempre puede utilizar este demo.

Basta con pegar el código que quieres colorear, elegir en Syntax el lenguaje de programación, marcar la casilla Output as HTML snippet, y pulsar el botón Highlight.

Te devolverá un código HTML con estilos CSS, por lo que tan solo debes añadirlo a tu web o blog y ya se verá la sintaxis con color.

Resultado:

<?
echo 'Hola Mundo';
?>



Función para detectar y colorear sintaxis PHP


Para terminar, añado una sencilla función de mi propia cosecha, escrita en PHP:


<?
function sintaxis ($cadena) {
  while (
strpos ($cadena'[codigo]')) {
    
$parte1 explode ('[codigo]'$cadena2);
    
$parte2 explode ('[/codigo]'$parte1[1], 2);

    
$code highlight_string ($parte2[0], true);

    
$cadena $parte1[0].$code.$parte2[1];
  }

  return 
$cadena;
}
?>

Su funcionamiento es bastante intuitivo, todo lo que se encuentre entre las etiquetas [codigo] [/codigo], se le aplicará la función highlight_string (que mencioné más arriba), y todo lo demás se dejará intacto.

Nota: Se puede utilizar perfectamente este script sustituyendo la función "highlight_string" por cualquier otra que encontréis en la red que se encargue de colorear la sintaxis de un código.

Si hay cosa que molesta a un Blogger o a un WebMaster es que se aprovechen de su esfuerzo metiendo tu blog en un iFrame, pero los hay que llegan aún más allá y copian tu sitio completo utilizando Bots o Robots automáticos y lo llenan de publicidad.

Esposas ladrón

Un iframe bastante conocido es el de Google Image, sin embargo Google tiene el detalle de indicar el sitio web donde se encuentra cada imagen.




Como salir de un iFrame


Un iFrame es fácil de solventar, ya que técnicamente no es más que un sitio web incluido dentro de otro. Puedes realizar una simple redirección en JavaScript, colocando el siguiente código dentro de las etiquetas <head> </head>.


<script type="text/javascript">
<!--
if (top.location!=this.location) top.location=this.location;
//-->
</script>

También existe un plugin para WordPress que cumple la misma función, Break Out Of Frames.

Con esto conseguirás que cuando alguien acceda a tu sitio desde un iFrame, sea redireccionado hasta el sitio web original.




Bloquear robots ladrones de contenido


Hace poco me encontré con el curioso problema, de que la sección Famosos 2.0 de este blog, fue copiada en otro sitio web.

Creí que era un simple iFrame, pero tras observar el código fuente descubrí que el JavaScript había sido eliminado y todos los enlaces originales remplazados por otros.

Se trataba de un Robot automático o "Web Scraping", que recogía y cambiaba a su antojo el contenido original para después mostrarlo en su web, robando ancho de banda y obteniendo visitas a nuestra costa.

Para poder solucionar el problema, lo primero que debes hacer es descubrir cual es la IP del robot o del dominio que te esta copiando el contenido, lo puedes hacer de dos formas:

  • Vete a Whois e introduce la URL de su dominio.
  • O comprueba su IP usando la función PHP: "$_SERVER["REMOTE_ADDR"];"

Una vez conozcas su IP, puedes hacer uso del fichero de configuración .htaccess para bloquear su acceso a tu web.


#Bloquear IP
order allow,deny
deny from DIRECCION IP
allow from all

Recuerda sustituir "DIRECCION IP" por la IP correspondiente.

Hace tiempo leí un artículo bastante divertido sobre las "formas para ahuyentar a las visitas en un sitio web". Deshabilitando el botón derecho del ratón, cambiando el tamaño de la ventana del navegador, añadiendo varios "Pop Up" al cargar la página, etc.

JavaScript phohibido

Ese tipo de practicas son poco recomendables, ya que resultan realmente incómodas, pero por si alguien le molesta que le visiten o disfruta ahuyentando a los usuarios, a continuación explico cómo hacer alguno de esos trucos en JavaScript:



Como bloquear el botón derecho del ratón


Únicamente tienes que añadir en la etiqueta <body>, el siguiente evento JavaScript.


<body oncontextmenu='return false'>

Aunque ya que te pones puedes bloquear también el botón izquierdo poniendo lo siguiente.


<body oncontextmenu='return false' onselectstart='return false'>



Como cambiar el tamaño de la ventana


Pon en siguiente código dentro de las etiquetas <head></head> y se cambiará el tamaño de la ventana a la resolución que elijas cuando carguen la página.


<script language="JavaScript">
self.resizeTo(width="800", height="600")
</script>



Como evitar que vuelvan a la página anterior


Este script no funciona para todos los navegadores, y en los que funciona, se puede evitar fácilmente pulsando varias veces el botón "Atrás".

Método 1


<body onload="Javascript:history.go(1);" onunload="Javascript:history.go(1);">


Método 2


<script language="JavaScript">
javascript:window.history.forward(1);
</script>



Como abrir Pop Up o ventanas emergentes




Al cargar la página

Con el siguiente código se abrirá una ventana con la dirección que elijas, al cargar la página, sin embargo lo más probable es que el navegador la bloquee.


<script language="JavaScript">
window.open("pagina.html", "Ventana", "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, width=500, height=300");
</script>


Al pulsar en un enlace

Abrir un Pop Up mediante un enlace no es especialmente molesto, pero es una forma de evitar que el navegador lo bloquee. Para hacerlo, tan solo escribe el enlace de la siguiente forma:


<a href="pagina.htm" target="_blank" onClick="window.open(this.href, this.target, 'width=500, height=300'); return false;">Abrir Pop Up</a>



Nota: Si no te conformas con irritar a los visitantes, siempre puedes evitar que vuelvan a entrar más, bloqueándolos con el archivo .htaccess, pudiendo incluso bloquear países enteros.

Existen numerosas funciones en PHP para la manipulación de fechas, sin embargo siempre están limitadas a un rango que va desde 1701 a 2038 en UNIX.

Restar Fechas PHP

De entre todas las operaciones posibles, una de las más comunes es restar dos fechas determinadas, sin embargo cualquier fecha que exceda estas cifras devolverá resultados erróneos.




Posibles soluciones


  • Usar una librería, que permite un rango de fechas desde el año 100 hasta el año 3000 en el futuro. Solo recomendada si vas a trabajar constantemente con fechas, ya que posee más de 1000 líneas de código.
  • La segunda opción es hacer una pequeña función que solvente el problema.



Función para restar fechas


Dado que necesitaba restar fechas de cualquier tiempo, elaboré una función que es capaz de resolver dicha tarea. Aun la estoy probando, de momento funciona correctamente incluso para fechas "AC".

Si tienes el mismo problema a continuación pongo la función, también puedes descargarla aquí.


<?php
function restarFechas ($fecha1$fecha2) {
  
define (year, ((365 24 60 60) + (60 60))); //365 Dias y 6 Horas

  //Separamos dia, mes y año de las fechas
  
$fecha1 explode ("/"$fecha1);
  
$fecha2 explode ("/"$fecha2);

  
//Restamos los años y los pasamos a segundos
  
$anios = (($fecha2[2] - $fecha1[2]) - 1);
  
$anios = ($anios year);

  
//Calculamos los dias transcurridos entre los meses de cada fecha
  
$dias 0;
  
$mes $fecha1[1];
  for (
$i=0$i<2$i++) {
    switch (
$mes) {
      case 
1: if ($dias == 0) { $dias += (31 $fecha1[0]); } elseif ($fecha2[1] == 1) { $dias += $fecha2[0]; break 2; } else { $dias += 31; }
      case 
2: if ($dias == 0) { $dias += (28 $fecha1[0]); } elseif ($fecha2[1] == 2) { $dias += $fecha2[0]; break 2; } else { $dias += 28; }
      case 
3: if ($dias == 0) { $dias += (31 $fecha1[0]); } elseif ($fecha2[1] == 3) { $dias += $fecha2[0]; break 2; } else { $dias += 31; }
      case 
4: if ($dias == 0) { $dias += (30 $fecha1[0]); } elseif ($fecha2[1] == 4) { $dias += $fecha2[0]; break 2; } else { $dias += 30; }
      case 
5: if ($dias == 0) { $dias += (31 $fecha1[0]); } elseif ($fecha2[1] == 5) { $dias += $fecha2[0]; break 2; } else { $dias += 31; }
      case 
6: if ($dias == 0) { $dias += (30 $fecha1[0]); } elseif ($fecha2[1] == 6) { $dias += $fecha2[0]; break 2; } else { $dias += 30; }
      case 
7: if ($dias == 0) { $dias += (31 $fecha1[0]); } elseif ($fecha2[1] == 7) { $dias += $fecha2[0]; break 2; } else { $dias += 31; }
      case 
8: if ($dias == 0) { $dias += (31 $fecha1[0]); } elseif ($fecha2[1] == 8) { $dias += $fecha2[0]; break 2; } else { $dias += 31; }
      case 
9: if ($dias == 0) { $dias += (30 $fecha1[0]); } elseif ($fecha2[1] == 9) { $dias += $fecha2[0]; break 2; } else { $dias += 30; }
      case 
10: if ($dias == 0) { $dias += (31 $fecha1[0]); } elseif ($fecha2[1] == 10) { $dias += $fecha2[0]; break 2; } else { $dias += 31; }
      case 
11: if ($dias == 0) { $dias += (30 $fecha1[0]); } elseif ($fecha2[1] == 11) { $dias += $fecha2[0]; break 2; } else { $dias += 30; }
      case 
12: if ($dias == 0) { $dias += (31 $fecha1[0]); } elseif ($fecha2[1] == 12) { $dias += $fecha2[0]; break 2; } else { $dias += 31; }
    }

    
$mes 1;
  }

  
//Restamos 1 año si los meses coinciden
  
if ($fecha1[1] == $fecha2[1] && $fecha1[0] < $fecha2[0]) {
    
$dias $dias 365;
  }

  
//Pasamos los dias a segundos
  
$segundos = ($dias 24 60 60);

  
//Sumamos los segundos de anios y meses
  
if ($fecha1[1] < $fecha2[1]) { $segundos = ($anios year $segundos); }
  elseif (
$fecha1[1] > $fecha2[1]) { $segundos = ($anios $segundos); }
  elseif (
$fecha1[0] < $fecha2[0]) { $segundos = ($anios year $segundos);}
  elseif (
$fecha1[0] > $fecha2[0]) { $segundos = ($anios $segundos); }
  else { 
$segundos = ($anios year); }

  
//Devolvemos la diferencia entre las dos fechas en segundos
  
return ($segundos);
}
?>

La función recibe dos fechas, (la primera anterior en el tiempo a la segunda), y devuelve la diferencia entre las dos en segundos.

Teniendo los segundos puedes formatearla como quieras, por ejemplo para obtener los años, tan solo divide el resultado entre 31557600, que equivaldría a 365 días y 6 horas en segundos.