2012-05-23 21 views
28

Mi fa male chiedere questo, ma, per qualche motivo, non sono riuscito a farlo funzionare (è tardi, sì, questa è la mia scusa) .Trasformare una virgoletta singola in una virgoletta sfuggita all'interno di una stringa

Diciamo che ho questa stringa:

s = "John's book." 

Utilizzando il metodo replace dalla stringa oggetto, voglio trasformarlo in questo:

s = "John\'s book." 

mi sarei aspettato questo codice che invia me quello che voglio:

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

Ma, che si traduce in:

"John\\'s book." 
+0

quello che stai facendo sembra che dovrebbe funzionare. Questo è il risultato del debugger? Penso che VS "aiuterà" mostrando un '\\' invece di un '\'. – SirPentor

+0

@SirPentor - Infatti. Ho avuto ragione, ma il debugger mi stava mostrando un valore diverso. –

risposta

57

fare questo in modo che non c'è bisogno di pensarci:

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

L'avevo provato in precedenza, e anche questo non funzionava. Risulta in: 'John \\ 's book. –

+8

Penso che potresti vederlo solo nel debugger/inspector che mostrerà l'escape (due volte) ma se fai' Console.Write() 'dovrebbe uscire correttamente . – lukiffer

+1

Probabilmente stai eseguendo il debug e osservando il risultato passando con il mouse su 's' in Visual Studio ... sì, questo mostra gli escape; perchè è la verità. Ma se si invia la stringa da qualche parte (una casella di testo, o nella console) uscirà con una singola barra. – BeemerGuy

4

Ho una funzione rapido e sporco per sfuggire il testo prima di utilizzare in una clausola inserto mysql, questo potrebbe aiutare:

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

Questo non funziona per me. Sto usando C#, Sqlite, ecc. Quello che ottengo è una barra rovesciata di fronte alla singola citazione, che non è il modo in cui Sqlite sfugge alle virgolette singole. – sapbucket

+0

@sapbucket come indicato, questo è per mysql. Puoi cambiarlo per inserire la sequenza esc corretta. – JohnP

2

più semplice sarebbe

Server.HtmlEncode(varYourString); 
+0

Questo non funziona, la quota diventerà ' – zquanghoangz

0

Solo per mostrare un'altra soluzione possibile, se questa competenza MVC.NET (MVC5 +):

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

Questo ti permette di fuggire e passare i dati alle viste come JavaScript. La parte chiave è:

HttpUtility.JavaScriptStringEncode 
Problemi correlati