¿Cómo escapo una cadena dentro de código JavaScript dentro de un manejador onClick?

Tal vez sólo estoy pensando en esto demasiado duro, pero I'm tener un problema para averiguar lo que escapar a utilizar en una cadena en algún código JavaScript dentro de un enlace's onClick controlador. Ejemplo:

<a href="#" onclick="SelectSurveyItem('<%itemid%>', '<%itemname%>'); return false;">Select</a>

El <%itemid%> y <%itemname%> es donde se produce la sustitución de plantilla. Mi problema es que el nombre del elemento puede contener cualquier carácter, incluidas comillas simples y dobles. Actualmente, si contiene comillas simples se rompe el código JavaScript.

Mi primera idea fue utilizar la función del lenguaje de plantillas para escapar de JavaScript el nombre del elemento, que sólo escapa las comillas. Eso no solucionará el caso de la cadena que contiene comillas dobles, que rompe el HTML del enlace. ¿Cómo se soluciona normalmente este problema? ¿Necesito escapar de HTML todo el manejador onClick?

Si es así, se vería realmente extraño ya que la función de escape del lenguaje de plantillas para eso también HTMLificaría los paréntesis, las comillas y los puntos y coma...

Este enlace se genera para cada resultado de una página de resultados de búsqueda, por lo que no es posible crear un método independiente dentro de una etiqueta JavaScript, ya que tendría que generar uno para cada resultado.

Además, utilizo un motor de plantillas creado en la empresa para la que trabajo, por lo que las soluciones específicas del kit de herramientas no me servirán de nada.

Si va a un atributo HTML, tendrá que codificarlo en HTML (como mínimo: > a > `

Comentarios (0)

Declara funciones separadas en la sección e invócalas en tu método onClick. Si tienes muchos, puedes usar un esquema de nombres que los numere, o pasar un entero en tus onClicks y tener una gran declaración switch en la función.

Comentarios (0)

Utilice la biblioteca Microsoft Anti-XSS que incluye una codificación JavaScript.

Comentarios (0)