2012-01-05 15 views
36

tengo que escapar comillas simples en los parámetros de la función JavaScript para evitar esto:de escape cotización individual en función de JavaScript parámetros

onclick="Javascript:INSERT_PRODUCT('188267','WILL AND GRACE','32311','L'ANNIVERSARIO DINOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5 ',this);" 

pero necesito escapar de ellos dentro de una llamada a la función ya no sé los valores que se pasar (variables db que no puedo escapar de la base de datos).

¿Existe alguna función que me permita hacer algo como lo siguiente?

onclick="Javascript:function(escape(param1), escape(param2), escape(param3));" 
+3

' '' '= \'' (Tal como lo haría una cadena normal). Y debido a que lo está insertando en el marcado, o _you_ tendría que escapar, o si un lenguaje del lado del servidor lo está generando, asegúrese de que _it_ se escape de él. –

+0

Yyou puede poner sus parámetros dentro de 'escape (param)' –

+4

La etiqueta 'Javascript:' no es necesaria allí. Debería usar otras formas para vincular los manejadores de eventos: http://www.quirksmode.org/js/introevents.html, entonces no tiene que preocuparse por las comillas. –

Respuesta

9

Escapar el apóstrofe con una barra invertida:

onclick="INSERT_PRODUCT('188267','WILL AND GRACE ','32311','L\'ANNIVERSARIO DI NOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5 ',this);" 
+4

por favor, elimine la 'Javascript:'. No está mal ponerlo allí, pero tampoco sirve de nada y los desarrolladores menos experimentados pueden pensar que es necesario. –

+2

Necesito una función para realizar el escape dentro de la llamada de myfunction ya que es el único lugar al que puedo acceder. ¿Cualquier sugerencia? –

+0

Esto fallará si la cadena contiene '" ','  ', '\' o cualquier otra entidad que codifique comillas simples o dobles o barra invertida. Por ejemplo, la cadena' 'foo' 'onmouseover = alerta (1) 'no contiene comilla simple, pero cuando está incrustado en un atributo HTML, explota una vulnerabilidad XSS. Del mismo modo, ''foo \' fallará, porque el analizador de JavaScript verá '\', no '\' por lo que la cita cerrada se interpretará como parte de la cadena, por lo que si el siguiente valor de cadena es 'alerta (1))// ', entonces eso se tratará como JavaScript literal, lo que resulta en la ejecución de guiones arbitrarios también. –

18
JSON.stringify(plainTextStr).replace(/&/, "&").replace(/"/g, """) 

producirá una cadena se puede integrar con seguridad en un atributo citado y que tendrá el mismo significado cuando se ve por el intérprete de JavaScript.

La única advertencia es que algunos Unicode saltos de línea (U + 2028 y U + 2029) need to be escaped antes de ser integrado en los literales de cadena de JavaScript, JSON, pero sólo requiere que \r y \n se escaparon.

0

Si te entiendo correctamente, no creo que lo que intentas hacer sea posible. Tendrá que escapar de las citas en el lado del servidor. Cualquier función que escaparía de las comillas para usted, sería en sí misma una función que requiere una cadena válida, lo que significa que tendría que ser escapada antes de pasarla a la función.

7

Quizás no esté del todo claro por la pregunta, pero suponiendo que todo lo que desea es enviarlo a un script PHP para almacenar en una base de datos, lo ideal sería utilizar los diversos métodos de PHP como stripslashes(), pero si Realmente no estoy tratando de ser demasiado sofisticado, simplemente agregando 1 barra en frente de una sola cita es suficiente para enviar una consulta SQL directamente a PHP desde el lado del cliente. Es no seguro, pero tal vez tampoco sea necesario.

str.replace(/'/g, "\\'"); // escaping \ with \, so used 2x 

hace el truco, como por ejemplo en algo como esto:.

var body = $('#body').val().replace(/'/g, "\\'"); 
myCustomSQLqueryFunction("UPDATE mytable SET `content`='"+ body +"';"); 

MySQL almacenará ahora su body como lo ves en el campo de formulario.

+0

Estaba probando esto y me di cuenta de que MySQL simplemente elimina las comillas simples como 'por lo que también tendría que escapar de ellas. – tim

3

Esta función trabajó para mí (que elimina y restaura la cita de nuevo): suponiendo que los datos a enviar es el valor de un elemento de entrada,

var Url = encodeURIComponent($('#userInput').val().replace("'","\\'")); 

a continuación, obtener el texto original de nuevo:

var originalText = decodeURIComponent(Url); 
1
var cmpdetail = cmpdetail.replace(/'/g, "\\'"); 

su trabajo para mí.

0

Prefiero usar comillas simples para definir cadenas de JavaScript. Luego escapo de mis citas dobles incrustadas de la siguiente manera.

Así es como lo hago, básicamente str.replace(/[\""]/g, '\\"').

var display = document.getElementById('output'); 
 
var str = 'class="whatever-foo__input" id="node-key"'; 
 
display.innerHTML = str.replace(/[\""]/g, '\\"'); 
 

 
//will return class=\"whatever-foo__input\" id=\"node-key\"
<span id="output"></span>

Cuestiones relacionadas