2010-08-11 14 views
5

Gdy użytkownik wprowadza wiadomość e-mail na mojej stronie internetowej, wysyłam wiadomość e-mail z potwierdzeniem e-mail zawierającą link. Link wygląda mniej więcej tak:Escape + (plus) w URI

http://mysite.com/[email protected]&token=12341234

tego konkretnego autora e-mail zawiera '+' (plus), więc ogniwo wygląda następująco:

http://mysite.com/[email protected]&token=12341234

po kliknięciu łącza (przynajmniej w Firefox) plus zostaje zastąpiony spacją.

Pytanie: Jakiej funkcji kodowania adresów URL używam w .net, aby uniknąć plusów.

Uwaga: Uri.EscapeUriString(email) pozostawia plus nietknięty.

Odpowiedz

12

Można użyć Uri.EscapeDataString zamiast - Właśnie zweryfikowane że konwertuje "foo + bar" na "Foo% 2BBar".

Szczerze mówiąc, byłbym wdzięczny, gdyby MS dostarczyło nieco więcej wskazówek na temat różnicy między tymi metodami, a także HttpUtility.UrlEncode (które nie jest dostępne na wszystkich platformach).

2

można spróbować metody UrlEncode:

string encodedEmail = HttpUtility.UrlEncode(email); 
0

Najlepszą rzeczą, którą można zrobić, to zaszyfrować lub zaszyfrować adres e-mail lub w pewnym sensie "uwzględnić" go w tokenie.

ten sposób Twój link może wyglądać następująco: http://mysite.com/VerifyEmail?token=12341234480348204023

Lub: http://mysite.com/VerifyEmail?emailcode=A124E4F325O425FE5F4J6636K66L&token=12341234

Jeśli zastosujemy trasę skrótu, należy pamiętać, że Base64 wykorzystuje również + jako ważnego znaku podczas kodowania. Powszechną praktyką jest zastąpienie go przez @ lub coś innego:

var emailcode = Convert.ToBase64String(GetHashBytes(email)).Replace('+', '@'); 

Następnie podczas wykonywania potwierdzenie:

var emailcodebytes = Convert.FromBase64String(Request["code"].Replace('@', '+')); 
+1

myślę, że przykład kodu jest nieco źle? Pierwsze ')' znajduje się w niewłaściwym miejscu: 'var emailcodebytes = Convert.FromBase64String (Request [" code "]. Replace ('@', '+'));' – rtpHarry

+0

Dzięki, @rptHarry, poprawiłem przykład. –