2012-05-23 12 views
28

Me duele preguntar esto, pero, por alguna razón, no he podido hacer que esto funcione (es tarde, sí, esa es mi excusa) .Convirtiendo una comilla simple en una comilla simple escapada dentro de una cadena

Digamos que tengo esta cadena:

s = "John's book." 

Utilizando el método replace de la cadena objeto, quiero convertirlo en esto:

s = "John\'s book." 

lo que habría esperado este código para dar yo lo que quiero:

s = s.Replace("'", "\\'") 

embargo, que se traduce en:

"John\\'s book." 
+0

lo que está haciendo parece que debería funcionar. Es ese resultado del depurador? Creo que VS "ayudará" al mostrar un '\\' en lugar de un '\'. – SirPentor

+0

@SirPentor - De hecho. Tenía razón, pero el depurador me estaba mostrando un valor diferente. –

Respuesta

57

hacer esto por lo que no tiene que pensar en ello:

s = s.Replace("'", @"\'"); 
+0

Lo había intentado anteriormente, y eso tampoco funcionó. Resulta en: 'John \\ 's book' –

+8

Creo que puede que solo lo esté viendo en el depurador/inspector que lo mostrará escapado (dos veces) pero si lo hace' Console.Write() 'debería salir correctamente . – lukiffer

+1

Probablemente esté depurando y mirando el resultado pasando el cursor sobre 's' en Visual Studio ... sí, eso muestra los escapes; porque esa es la verdad. Pero si imprime la cadena en algún lugar (un cuadro de texto o en la consola) saldrá con una sola barra. – BeemerGuy

4

Tengo una función rápida y sucia para escapar de texto antes de usar MySQL en una cláusula de inserción, esto podría ayudar:

public static string MySqlEscape(Object usString) 
    { 
     if (usString is DBNull) 
     { 
      return ""; 
     } 
     else 
     { 
      string sample = Convert.ToString(usString); 
      return Regex.Replace(sample, @"[\r\n\x00\x1a\\'""]", @"\$0"); 
     } 
    } 
+0

Esto no funciona para mí. Estoy usando C#, Sqlite, etc. Lo que obtengo es una barra invertida en frente de la comilla simple, que no es cómo Sqlite escapa de comillas simples. – sapbucket

+0

@sapbucket como se indicó, esto es para mysql. Puede cambiarlo para insertar la secuencia de esc correcta. – JohnP

2

más simple sería

Server.HtmlEncode(varYourString); 
+0

Éste no funciona, la cotización se convertirá en ' – zquanghoangz

0

Sólo para mostrar otra solución posible, si esta relacionada con MVC.NET (MVC5 +):

var data= JSON.parse('@Html.Raw(HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(Model.memberObj)))'); 

Esto le permite escapar y pasar los datos a la vista como JavaScript. La parte clave es:

HttpUtility.JavaScriptStringEncode 
Cuestiones relacionadas