viernes, 20 de noviembre de 2009

Propagando comillas en funciones de Javascript

Me encontré con un problema uno de estos días que representaba recibir en una función de Javascript un texto con comillas adecuadamente escapadas (uso de "\"). Ese mismo texto tenía que ser incluido dinámicamente como otro parámetro de otra función.


<html>
<head>
<script language="javascript">
function A(texto_escapado) {
var divContenido=document.getElementById("contenido");
divContenido.innerHTML = "<a href=\"javascript:B(\'" + texto_escapado +"\');\">clic aca!</a>";
alert(texto_escapado);
}

function B(texto_escapado) {
alert(texto_escapado);
}
</script>
</head>
<body>
<p><a href="javascript:A('\'Esto está escapado\'');">Paso 1</a></p>
<div id="contenido">...</div>
</body>
</html>


El problema que se genera es que a la hora de usar el texto para incluirlo en una concatenación, el texto escapado se pierde y se usa el carácter causando el siguiente
problema:


'Missing ) after argument list'





La solución que encontré es usar la función "replace" de una forma que parece muy particular:


texto_escapado = texto_escapado.replace(/\'/g, '\\\'');


Las dos primeras barras inclinadas ("slashes") son para escapar la primera barra en el texto y la última barra inclinada con la comilla es para escapar la comilla.
(\\="\") + (\'=') = \'


<html>
<head>
<script language="javascript">
function A(texto_escapado) {
var divContenido=document.getElementById("contenido");
alert(texto_escapado);
texto_escapado=texto_escapado.replace(/\'/g, '\\\'');
divContenido.innerHTML = "<a href=\"javascript:B(\'" + texto_escapado +"\');\">clic aca!</a>";
}

function B(texto_escapado) {
alert(texto_escapado);
}
</script>
</head>
<body>
<p><a href="javascript:A('\'Esto está escapado\'');">Paso 1</a></p>
<div id="contenido">...</div>
</body>
</html>


No hay comentarios:

Publicar un comentario