c# - Semn plus în șirul de interogare


Am o aplicație web creată folosind C# și ASP.NET. Am plasat o valoare de parametru în querystring cu un semn plus (+). Dar semnul plus dispare.

Cum pot include semnul plus (+) în șirul de interogare fără să dispară?

Vă rog să mă sfătuiți.

Mulțumesc.

Editare: cod adăugat cu UrlEncode

string str = Server.UrlEncode(Requery.QueryString["new"]);

Răspuns #1

Semnul + are o semnificație semantică în șirul de interogare. Este folosit pentru a reprezenta un spațiu. Un alt caracter care are importanță semantică în șirul de interogare este &, care este folosit pentru a separa diferitele perechi var=valoare din șirul de interogare.

Majoritatea scripturilor de pe partea serverului ar decodifica parametrii interogării înainte de a îi folosi, astfel încât un + să fie convertit corect într-un spațiu. Acum, dacă doriți să fie prezent un + literal în șirul de interogare, trebuie să specificați %2B în schimb.

Semnul + din șirul de interogare este decodat URL în spațiu. %2B din șirul de interogare este decodat URL într-un semn +.

Vedeți diferența dintre

http://www.google.com/search?q=foo+bar

și

http://www.google.com/search?q=foo%2Bbar

În exemplele de mai sus, scriptul serverului Google decodează URL-ul parametrilor de interogare și apoi îi folosește pentru a efectua căutarea.

Codificarea URL nu este altceva decât semnul % urmat de codul hexazecimal al caracterului special. De exemplu, știm că codul hexazecimal pentru A este 0x41 (zecimal: 65). Încearcă asta:

http://www.google.com/search?q=%41

Sper că acest lucru face clar codificarea URL.

Așadar, dacă doriți ca semnul + să fie păstrat atunci când un JavaScript preia un URL cu semne + în parametrii săi de interogare și un script de pe partea serverului ar procesa parametrii de interogare după decodificarea URL-ului, ar trebui să codificați URL-ul parametrilor de interogare înainte de a efectua cererea HTTP GET, astfel încât toate semnele + să fie convertite în %2B când cererea ajunge la scriptul de pe server. Acum, când scriptul de pe server decodifică șirul de interogare, toate %2B se vor converti înapoi în semne +, ceea ce este ceea ce doriți.

Vezi Encode URL în JavaScript? pentru a învăța cum să codifici parametrii URL folosind JavaScript. Răspuns scurt din discuția de acolo:

var encodedURL = "http://example.com/foo.php?var=" + encodeURIComponent(param);

Răspunsul #2

Ar trebui să codificați valorile șirului de interogare în URL pentru a vă asigura că orice caractere speciale nu se pierd.