c# - Plustecken i frågesträng
Jag har en webbapp skapad med C# och asp.net. Jag la ett parametervärde i frågesträngen med ett plustecken (+). Men plustecknet försvann.
Hur kan jag inkludera plustecknet (+) i frågesträngen utan att det försvinner?
Vänligen rådgör.
Tack.
Redigera: lade till kod med UrlEncode
string str = Server.UrlEncode(Requery.QueryString["new"]);
Svar #1
Tecknet + har en semantisk betydelse i frågesträngen. Det används för att representera ett mellanrum. Ett annat tecken som har semantisk betydelse i frågesträngen är & som används för att separera de olika var=value-paren i frågesträngen.
De flesta serversideskript skulle avkoda frågeparametrarna innan de använder dem, så att en + korrekt omvandlas till ett mellanslag. Nu, om du vill att en bokstavlig + ska finnas i frågesträngen, måste du ange %2B istället.
+-tecknet i frågesträngen avkodas till ett mellanslag. %2B i frågesträngen avkodas till ett + tecken.
Se skillnaden mellan
http://www.google.com/search?q=foo+bar
och
http://www.google.com/search?q=foo%2Bbar
I exemplen ovan avkodar Googles serverskript URL-parametrarna och använder dem sedan för att göra sökningen.
URL-kodning är inget annat än %-tecknet följt av hexkoden för tecknet. Till exempel vet vi att hexkoden för A är 0x41 (decimal: 65). Prova detta:
http://www.google.com/search?q=%41
Hoppas detta gör URL-kodning tydlig.
Så, om du vill att +-tecknet ska bevaras när JavaScript hämtar en URL med +-tecken i sina frågeparametrar och ett serversideskript skulle bearbeta frågeparametrarna efter att ha URL-avkodade dem, bör du URL-koda frågeparametrarna i URL:en innan du skickar HTTP GET-förfrågan så att alla +-tecken konverteras till %2B när förfrågan når serversideskriptet. Nu, när serversideskriptet URL-avkodar frågesträngen, konverteras alla %2B tillbaka till +-tecken, vilket är vad du vill.
Se Encode URL i JavaScript? för att lära dig hur man URL-kodar parametrarna med JavaScript. Kort svar från diskussionen där:
var encodedURL = "http://example.com/foo.php?var=" + encodeURIComponent(param);
Svar #2
Du bör URLEncoda dina frågesträngsvärden för att säkerställa att alla specialtecken inte förloras.
