2011-03-19 33 views
41

Estoy recuperando datos de la base de datos donde un campo contiene String con datos HTML. Quiero reemplazar todas las comillas dobles para que se puedan usar para parseJSON de jQuery.Reemplazar todas las comillas dobles dentro de String

Utilización de Java que estoy tratando de reemplazar las comillas usando ..

details.replaceAll("\"","\\\""); 
    //details.replaceAll("\"","&quote;"); details.replaceAll("\"","&#34"); 

han tratado al modo L Este pero la cadena resultante no muestra el cambio. El artículo O'reily prescribe Article apache string utils. ¿¿Hay alguna otra manera??

¿Alguna expresión regular o algo así?

Respuesta

76

Así es como

String details = "Hello \"world\"!"; 
details = details.replace("\"","\\\""); 
System.out.println(details);    // Hello \"world\"! 

Tenga en cuenta que las cadenas son immutable, por lo tanto, no basta con que se haga details.replace("\"","\\\""). Debe reasignar la variable details a la cadena resultante.


Usando

details = details.replaceAll("\"","&quote;"); 

vez, se traduce en

Hello &quote;world&quote;! 
+7

+1 para cuerdas * * es inmutable. –

+0

+1 cadena olvidada es inmutable :) –

5

Creo que una expresión regular es un poco exagerada en esta situación. Si lo que desea es eliminar todas las comillas en la cadena de Yo uso este código:

details = details.replace("\"", ""); 
4

para que funcione en JSON, que necesita para escapar un poco más carácter que eso.

myString.replace("\\", "\\\\") 
    .replace("\"", "\\\"") 
    .replace("\r", "\\r") 
    .replace("\n", "\\n") 

y si quieres ser capaz de utilizar json2.js a analizar entonces también tiene que escapar

.replace("\u2028", "\\u2028") 
    .replace("\u2029", "\\u2029") 

cual permite JSON dentro de cadenas entre comillas, pero que JavaScript no.

+0

Estoy usando jquery 1.5 .. ¿Requiero esto todo? – MalTec

+0

@MalTec, si su cadena puede contener barras invertidas, entonces sí. Considere si su cadena es ''\\"' '. Si la ajusta entre comillas y solo escapa de las comillas, entonces obtiene' "\\" "' que es una cadena inválida. Si su cadena puede contener nuevas líneas, entonces necesita escapar de ellas también. Las líneas nuevas no están permitidas dentro de las cadenas en JQuery. –

24

No que tiene que ser:

.replaceAll("\"","\\\\\"") 

CINCO barras invertidas en la cadena de reemplazo.

+4

Sí, si tuviera que usar 'replaceAll()', esa sería la forma correcta. Es por eso que todos dicen usar 'replace()' en su lugar. ;) –

+0

Acabo de pasar la mayor parte de una hora averiguando por qué mi 'replaceAll()' no funcionaba. Olvidé por completo que también había un método 'replace()'. – Ben

+3

¿Por qué 3 barras invertidas usando replace() pero 5 barras diagonales inversas usando replaceAll()? – Ida

3

Sé que la respuesta ya está aceptada aquí, pero solo quería compartir lo que encontré cuando traté de evitar comillas dobles y comillas simples.

Esto es lo que he hecho: y esto funciona :)

para escapar comillas dobles:

if(string.contains("\"")) { 
     string = string.replaceAll("\"", "\\\\\""); 
    } 

y para escapar comillas simples:

if(string.contains("\'")) { 
     string = string.replaceAll("\'", "\\\\'"); 
    } 

PS: Tenga en cuenta la cantidad de barras invertidas utilizadas anteriormente.

2

Esto es para eliminar las comillas dobles en una cadena.

str1 = str.replace(/"/g, ""); 
alert(str1); 
+0

OP quería una respuesta para Java. –

0

La siguiente expresión regular funcionará para ambos:

text = text.replaceAll("('|\")", "\\\\$1"); 
Cuestiones relacionadas