2012-11-26 10 views
5

W tej zmiennej chciałbym dodać \ "przed każdym".Zamień "na " w C#

string html = 
    "<a href=\"annee-prochaine.html\">Calendrier de l'annee prochaine</a>" 

html = html.Replace("'", "\'"); //No change 
html = html.Replace("\'", "\'"); //No change 

html = html.Replace("\'", "\\'"); 
//html => <a href=\"annee-prochaine.html\">Calendrier de l\\'annee prochaine</a> 
html = html.Replace("\'", @"\'"); 
//html => <a href=\"annee-prochaine.html\">Calendrier de l\\'annee prochaine</a> 

Chciałbym, aby ta po Wymienić:

//html => <a href=\"annee-prochaine.html\">Calendrier de l\'annee prochaine</a> 

Jakieś pomysły?

Dzięki!

+0

Masz wiele dobrych (+1 wszystkich) odpowiedzi, ale ... Upewnij się, że robisz to dla czystej zabawy, nie wypisujesz HTML w ASP.Net WebForms/MVC, ponieważ istnieją lepsze sposoby na uzyskanie właściwego kodowania HTML . Zauważ, że "l'annee" prawdopodobnie może zawierać "' "zamiast pojedynczego cudzysłowu ... –

Odpowiedz

8

Mocno podejrzewam, że patrzysz na strunach w debugger, dlatego widzisz podwójnych ukośników.

Ta wersja jest absolutnie w porządku:

html = html.Replace("\'", "\\'"); 

(Jeden z wykorzystaniem pełnych ciąg dosłowne byłoby zbyt dobrze). Zamiast patrząc na nią w debugger, zaloguj się lub po prostu służyć, a wszystko powinno w porządku.

Fakt, że widzisz to również w przypadku podwójnego cytatu, jest kolejnym tego dowodem. Na przykład, wyrażenie:

string html = "<a href=\"anne..."; 

... Czy nie zawierać ukośnika, ale twoi diagnostyka pokazujemy go, co jest, co by się spodziewać w debugger.

+0

Rzeczywiście, szukałem ciągu znaków w debugerze. Działa dobrze. – Ceryl

7

Znak ukośnika odwrotnego jest znakiem escape, więc musisz umieścić 2 z nich lub użyć modyfikatora @ string, który ignoruje escaping.

html=html.Replace("'", "\\'"); // this should work 
html=html.Replace("'", @"\'"); // or this 
+0

To działa, szukałem ciągu znaków w debugerze, dlatego widziałem \\ 'po zamianie. – Ceryl

+0

Cieszę się, że masz to, czego potrzebujesz; Skeet jest człowiekiem. To było dobrze napisane pierwsze pytanie. –

1
string html = "<a href=\"annee-prochaine.html\">Calendrier de l'annee prochaine</a>" 

html = html.Replace("'",@"\'"); 
1

Spróbuj tego:

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

Każda z tych linii:

html=html.Replace("\'", "\\'"); 
html=html.Replace("\'", @"\'"); 

powinien robić, co chcesz. Może debugger mówi ci, że są podwójne \ znaki, ale w rzeczywistości jest tylko jeden.

EDYCJA: przepraszam, właściwie to powinien być "'" jako pierwszy argument.