2012-05-23 8 views
28

Es tut mir weh, das zu fragen, aber aus irgendeinem Grund konnte ich das nicht zur Arbeit bringen (es ist spät am Tag, ja, das ist meine Entschuldigung) .Ein einfaches Anführungszeichen wird in ein gestrichenes Anführungszeichen innerhalb einer Zeichenkette umgewandelt

Lassen Sie uns sagen, ich habe diese Zeichenfolge:

s = "John's book." 

Mit dem replace Methode aus dem Objekt String, möchte ich es in das verwandeln:

s = "John\'s book." 

Ich habe diesen Code erwartet würde geben ich was ich will:

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

Aber das ergibt:

"John\\'s book." 
+0

was Sie tun, sieht aus wie es sollte funktionieren. Ist das Ergebnis vom Debugger? Ich denke, VS wird "helfen", indem ein "\" anstelle von "\" angezeigt wird. – SirPentor

+0

@SirPentor - In der Tat. Ich hatte es richtig gemacht, aber der Debugger zeigte mir einen anderen Wert. –

Antwort

57

SieFormal dies so muss man nicht darüber nachdenkt:

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

Ich hatte das vorher versucht, und das hat auch nicht funktioniert. Es ergibt sich: 'John \\ 'book.' –

+8

Ich denke, Sie können es nur im Debugger/Inspector anzeigen, die es angezeigt wird (zweimal), aber wenn Sie' Console.Write() 'sollte es korrekt ausgeben . – lukiffer

+1

Wahrscheinlich debuggen Sie und schauen sich das Ergebnis an, indem Sie in Visual Studio den Mauszeiger über 's' halten ... ja, das zeigt die Escape-Zeichen; Denn das ist die Wahrheit. Aber wenn Sie die Zeichenfolge irgendwo ausgeben (ein Textfeld oder in der Konsole), wird es mit einem einzigen Schrägstrich ausgegeben. – BeemerGuy

4

Ich habe einen schnellen und schmutzigen Funktionstext zu entkommen, bevor in einer MySQL-Insert-Klausel, diese helfen kann:

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

Das funktioniert nicht für mich. Ich benutze C#, Sqlite, etc. Was ich bekomme, ist ein Backslash vor dem einfachen Zitat, das ist nicht, wie Sqlite einfache Anführungszeichen entkommt. – sapbucket

+0

@sapbucket wie erwähnt, dies ist für mysql. Sie könnten es ändern, um die richtige Esc-Sequenz einzufügen. – JohnP

2

Simplest würde man sein

Server.HtmlEncode(varYourString); 
+0

Dies funktioniert nicht, das Angebot wird ' werden – zquanghoangz

0

Nur eine weitere mögliche Lösung zu zeigen, wenn dies zu MVC.NET Zusammenhang (MVC5 +):

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

Dieses Sie ermöglicht es, Daten zu Ansichten wie JavaScript zu entkommen und übergeben. Der Schlüssel ist:

HttpUtility.JavaScriptStringEncode 
Verwandte Themen