2012-05-23 12 views
28

To bolesne, że o to pytam, ale z jakiegoś powodu nie udało mi się tego przekonać (jest późno w dzień, tak, to moja wymówka) .Zamienianie pojedynczego cudzysłowu w unikatowy pojedynczy cudzysłów w ciągu znaków

Powiedzmy mam ten ciąg:

s = "John's book." 

stosując metodę z łańcucha obiektu replace chcę przekształcić go w ten sposób:

s = "John\'s book." 

Oczekiwałem tego kodu, aby dać mi, co chcę:

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

jednak, że wyniki w:

"John\\'s book." 
+0

co robisz wygląda jak to powinno działać. Czy to wynik debuggera? Myślę, że VS "pomoże", pokazując "\\" zamiast "\". – SirPentor

+0

@SirPentor - Rzeczywiście. Miałem to dobrze, ale debugger pokazywał mi inną wartość. –

Odpowiedz

57

Czy to więc nie trzeba o tym myśleć:

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

Próbowałem już wcześniej, i to też nie działało. Wynika z tego: 'książka Johna.' –

+8

Myślę, że po prostu oglądasz ją w debuggerze/inspektorze, który pokaże, że uciekła (dwa razy), ale jeśli zrobisz 'Console.Write()', to powinna wyjść poprawnie . – lukiffer

+1

Prawdopodobnie debugujesz i patrzysz na wynik, umieszczając kursor nad 's' w Visual Studio ... tak, pokazuje pokazy ucieczki; bo to prawda. Ale jeśli wypiszesz gdzieś ciąg znaków (pole tekstowe lub w konsoli), wyświetli się pojedynczy ukośnik. – BeemerGuy

4

mam szybki i brudny funkcję ucieczki tekst przed użyciem w klauzuli insert mysql, to może pomóc:

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

To nie działa dla mnie. Używam C#, Sqlite, itp. Otrzymuję odwrotny ukośnik przed pojedynczym cudzysłowem, który nie jest tym, w jaki sposób Sqlite wymyka się pojedynczym cudzysłowom. – sapbucket

+0

@ sapbucket jak zaznaczono, jest to dla mysql. Możesz go zmienić, aby wstawić prawidłową sekwencję esc. – JohnP

2

najprostszy jeden byłby

Server.HtmlEncode(varYourString); 
+0

Ten nie działa, cytat stanie się ' – zquanghoangz

0

Wystarczy pokazać Innym możliwym rozwiązaniem, jeśli ten dotyczących MVC.NET (MVC5 +):

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

To pozwala uciec i przekazywanie danych do widoków JavaScript. Kluczowym elementem jest:

HttpUtility.JavaScriptStringEncode 
Powiązane problemy