2012-07-17 10 views
27

Decir que tengo una variable de cadena (var str) los siguientes-¿Cómo reemplazo una comilla doble con una comilla doble escape-char en una cadena usando javascript?

Amigo, que totalmente dijo que "You Rock!"

Ahora Si voy a hacer que parezca que los siguientes-

Amigo, que totalmente dijo que \ "Usted oscila! \"

¿Cómo lograr esto usando la función JavaScript replace()?

str.replace("\"","\\""); no funciona tan bien. Da error unterminated string literal.

Ahora bien, si la frase anterior iban a ser almacenada en una base de datos SQL, por ejemplo en MySQL como un LONGTEXT (o cualquier otra VARCHAR -ish ) tipo de datos, lo que optimizaciones cadena de más que tenga que llevar a cabo? Las comillas y las comas no son muy amigables con las cadenas de consulta. También agradecería algunas sugerencias al respecto.

Respuesta

44

Es necesario utilizar una expresión regular global para esto, trate de esta manera

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

la salida sintaxis de expresiones regulares y las opciones para la función de reemplazar aquí:

http://www.regular-expressions.info/javascript.html

6

Prueba esto:

str.replace("\"","\\\""); // (escape backslashes and embedded double-quotes) 

O bien, utilizar comillas simples para citar a su búsqueda y reemplazar cadenas:

str.replace('"','\\"'); // (still need to escape the backslash) 

ACTUALIZACIÓN: Como ha señalado Helmus, si el primer parámetro pasado a .replace() es una cadena, solo reemplazará la primera ocurrencia. Para reemplazar a nivel mundial tiene que pasar una expresión regular con la bandera g (global):

str.replace(/"/g,"\\\""); 
// or 
str.replace(/"/g,'\\"'); 

Pero ¿por qué incluso hacer esto en JavaScript? Está bien utilizar estos caracteres de escape si usted tiene una cadena literal como:

var str = "Dude, he totally said that \"You Rock!\""; 

Pero esto es necesario solamente en una cadena literal. Es decir, si su variable JS está configurada en un valor que un usuario tipeó en un campo de formulario, no necesita este escape.

En cuanto a su pregunta sobre el almacenamiento de una cadena en una base de datos SQL, solo necesita escaparse de los caracteres si está incrustando una cadena literal en su instrucción SQL, y recuerde que los caracteres de escape que se aplican en SQL aren ' t (generalmente) lo mismo que para JS. Haría cualquier servidor escapado relacionado con SQL.

+0

este no funcionará ya que solo relacionará la primera comilla doble –

+0

Buen punto @helmus - Actualizaré mi respuesta. – nnnnnn

+0

@nnnnnn Gracias por la información adicional sobre el escape de consultas SQL. Para el proyecto de prueba en el que estaba trabajando, decidí escapar de cualquier personaje que deba escapar antes de enviarlos como una cadena en una consulta al servidor. –

0
var str = 'Dude, he totally said that "You Rock!"'; 
var var1 = str.replace(/\"/g,"\\\""); 
alert(var1); 
Cuestiones relacionadas