Función escape() de Javascript

La función escape() de Javascript contiene una funcionalidad que, a partir de una cadena determinada, crea una nueva cadena en la que algunos caracteres son cambiados por una secuencia hexadecimal de escape. Esto nos será muy útil cuando queramos tratar en Javascript las cadenas de caracteres que hayan sido introducidas por el usuario en una determinada aplicación web. Por ejemplo, el usuario podría introducir un texto con una comilla simple y, si no la tratamos con escape(), nuestro Javascript será incapaz de interpretarlo y ese caracter especial provocará que nuestra web deje de funcionar.  


 

Hay que remarcar que, en realidad, la función escape() está obsoleta y ya no se usa en webs nuevas, pero todavía podemos encontrarnos con aplicaciones antiguas en las que nos será muy útil recurrir a dicha conversión. Si el usuario tiene libertad para introducir caracteres especiales, entonces existe una alta probabilidad de que alguno de dichos caracteres acabe haciendo fallar nuestro Javascript. Por tanto, conviene tener en mente que, para estos casos, dispondremos de la alternativa de escape() para solucionar nuestro problema.

 

Error en la lectura de caracteres especiales

 

Imaginemos la hipotética situación en la que tenemos un JSP que recibe una cadena de caracteres introducida por el usuario y en la que dicha cadena contiene el caracter especial comilla simple (en realidad, no es una situación hipotética, es algo que he visto continuamente en muchas aplicaciones). Por ejemplo, tenemos un campo en el que se tiene que indicar el nombre de la empresa y ahí el usuario introduce el valor "CAD'PEBAR". Daos cuenta de que esa cadena de caracteres contiene una comilla simple ('), un caracter especial potencialmente peligroso para nuestra aplicación web.

Identificador:   CAD'PEBAR


Supongamos que en nuestro JSP capturamos el valor de dicho Identificador en una variable de la siguiente forma:

 

<SCRIPT language="JavaScript" >

var identificador = "<%= empresaVista.getIdentificador() %>";

</SCRIPT>

 

En ese caso, la variable acabará conteniendo el valor tal y como lo introdujo el usuario, esto es, con la comilla simple.

identificador = CAD'PEBAR

 

Si, por ejemplo, posteriormente queremos enviar dicho valor como componente del endpoint tratado en algún otro JSP, nos quedaría algo así:

endpoint = 'CAD'PEBAR';

 

En cuanto intentemos leer dicho endpoint en alguno de los JavaScript de nuestra aplicación, obtendremos un error indicándonos que no se consigue decodificar su contenido. El error podría ser algo así:

========================

Error

Se esperaba ';'

formularioApp.jsp (47,187)

========================


Escapando caracteres con la función escape()

 

Para evitar el problema anterior, lo único que tendremos que hacer es "escapar" el contenido del valor anterior recogido a partir de la introducción de datos del usuario. Con la función escape() conseguiremos transformar los caracteres especiales de nuestra cadena de texto, convirtiéndola en una cadena que podrá ser decodificada por nuestro contenido JavaScript. Se trata de un cambio sencillo, pero nos ahorrará multitud de problemas en nuestra aplicación. Siguiendo con el ejemplo anterior, esto supondrá obtener el nombre de la empresa de la siguiente forma.


<SCRIPT language="JavaScript" >

var identificador = escape("<%= empresaVista.getIdentificador() %>");

</SCRIPT>

 

En ese caso, la variable acabará conteniendo el valor transformado. En nuestro ejemplo, la comilla simple se sustituirá por el caracter "%27".

identificador = CAD%27PEBAR


De esta forma, cuando traspasemos dicho valor al contenido de algún endpoint, ahora la cadena tendrá un aspecto algo diferente al que vimos antes.

endpoint = 'CAD%27PEBAR';

 

Y, lo que es más importante, este contenido ya no producirá error alguno en nuestra aplicación. La cadena transformada podrá ser leida sin problemas por nuestro contenido JavaScript. Se trata de un cambio sencillo pero, si no localizamos el punto en el que se está produciendo el error, puede darnos más quebraderos de cabeza de los previstos.

 

Comentar que aquí hemos visto un ejemplo con la comilla simple, pero la función escape() también nos valdría para transformar el resto de caracteres especiales. Así que tenedlo en cuenta. Si en el futuro os encontráis en vuestro JavaScript con una incidencia similar a la comentada más arriba, recordad que esta función podrá subsanar el problema. Eso sí, tened en cuenta que se trata de una funcionalidad obsoleta y que, por tanto, únicamente deberíamos emplearla en aplicaciones antiguas. Lo más conveniente es no incluirla en nuevos desarrollos.


Saludos.


Comentarios

Entradas populares de este blog

Componentes y Ventanas de Java Swing

Creación de Webservice SOAP básico

Fichero standalone del Servidor JBoss EAP