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.
