2010-02-03 9 views
28

Sólo una cadena. Agregue \ 'a cada vez que haya una comilla simple.¿Cómo agrego barras en una cadena en Javascript?

+4

vale que esto no puede ser para la prevención de inyección SQL, ya que un atacante puede fácilmente pasar por alto esto. El código de explotación no tiene que ejecutar su javascript, simplemente enviará la solicitud. La entrada de escape y desinfección siempre debe hacerse desde el lado del servidor. – rook

+0

O bien, es posible que desee guardarse un poco de PHP y hacerlo en el lado del cliente como lo hace la pregunta específicamente. – tim

+0

Lo que Rook dice es que * no * debes ahorrarte algo de PHP y hacerlo en el lado del cliente, porque un atacante puede eludir fácilmente cualquier código del lado del cliente. –

Respuesta

51

replace obras para la primera cita, por lo que necesita una pequeña expresión regular:

str = str.replace(/'/g, "\\'"); 
+4

Esto es incorrecto porque también necesita escabullirse. –

+0

@AlexeyLebedev - El segundo argumento no es un patrón de expresiones regulares: solo necesita una barra invertida en la cadena. – Kobi

+0

veamos: str = "\\ '"; str = str.replace (/ '/ g, "\\'"); –

3
var myNewString = myOldString.replace(/'/g, "\\'"); 
2
var str = "This is a single quote: ' and so is this: '"; 
console.log(str); 

var replaced = str.replace(/'/g, "\\'"); 
console.log(replaced); 

le da:

This is a single quote: ' and so is this: ' 
This is a single quote: \' and so is this: \' 
3

Para estar seguros, es necesario no solo reemplaza las comillas simples, pero también las ya escapadas:

"first ' and \' second".replace(/'|\\'/g, "\\'") 
5

Una respuesta que no solicitó puede ser útil, si está haciendo el reemplazo como preparación para enviar la cadena a alerta() - o cualquier otra cosa donde un carácter de comilla simple pueda hacer que se tropiece .

str.replace("'",'\x27') 

que sustituirá todas las comillas simples con el código hexadecimal de comilla simple.

+4

Esas cadenas son idénticas. A menos que quisieras decir '\\ x27'. –

25

siguiente función JavaScript maneja',", \ b, \ t, \ n, \ r equivalente f o \ de addslashes función php().

function addslashes(string) { 
    return string.replace(/\\/g, '\\\\'). 
     replace(/\u0008/g, '\\b'). 
     replace(/\t/g, '\\t'). 
     replace(/\n/g, '\\n'). 
     replace(/\f/g, '\\f'). 
     replace(/\r/g, '\\r'). 
     replace(/'/g, '\\\''). 
     replace(/"/g, '\\"'); 
} 
+0

Esta función hará lo contrario, espero que esté bien publicar aquí ... yikes .. String.prototype.stripSlashes = function() { return this.replace (/\\(.)/ mg, "$ 1"); } –

16

Una cadena se puede escapar integral y compacta usando JSON.stringify. es parte de JavaScript como de ECMAScript 5 y apoyado por las principales versiones más recientes del navegador.

str = JSON.stringify(String(str)); 
str = str.substring(1, str.length-1); 

con este enfoque, también caracteres especiales como el byte nulo, los caracteres Unicode y saltos de línea y \r\n se escapan correctamente en una declaración relativamente compacta.

+1

Compatible con todos los navegadores con más de 0.1% de uso de uso global, aunque la versión 8 de IE debe estar en modo estándar. – thelem

1
if (!String.prototype.hasOwnProperty('addSlashes')) { 
    String.prototype.addSlashes = function() { 
     return this.replace(/&/g, '&') /* This MUST be the 1st replacement. */ 
      .replace(/'/g, ''') /* The 4 other predefined entities, required. */ 
      .replace(/"/g, '"') 
      .replace(/\\/g, '\\\\') 
      .replace(/</g, '&lt;') 
      .replace(/>/g, '&gt;').replace(/\u0000/g, '\\0'); 
     } 
} 

Uso: alert (str.addSlashes());

ref: https://stackoverflow.com/a/9756789/3584667

Cuestiones relacionadas