Lad os se på følgende to URL'er, overfører de de samme parametre? aaa.aspx?tag=.net%bc%bc%ca%f5 aaa.aspx?tag=.net%e6%8a%80%e6%9c%af
Det virker anderledes, men faktisk bruger de alle UrlEncode til ".net-teknologi", men den ene er GB2312-kodning og den anden er Utf-8-kodning. Følgende kode kan opnå ovenstående kodningseffekt:
string tmp1 = System.Web.HttpUtility.UrlEncode(".net technology", System.Text.Encoding.GetEncoding("GB2312")); streng tmp2 = System.Web.HttpUtility.UrlEncode(".net technology", System.Text.Encoding.UTF8);
Vores hjemmesider kan blive kaldt af andre programmer. For eksempel skal en ASP-side på operativsystemet i kinesisk forenklet en kinesisk parameter til en ASP.net side. Som standard vil ASP's Server.UrlEncode-metode på kinesiske forenklede operativsystemer kode kinesisk med GB2312-kodning. Men som standard er ASP.net sider kodet i UTF-8. I dette tilfælde, når du bruger Request.QueryString["Tag"] til at acceptere værdien, vil du ikke kunne acceptere kinesisk information, og du vil se forvrængede tegn i trin-for-trin fejlfinding. På nuværende tidspunkt, selvom Request.QueryString["Tag"] accepteres med forvanskede tegn, er URL'en på nuværende tidspunkt ikke forvansket.
Løsningen er selv at analysere parametrene i URL'en og derefter dekryptere værdierne af parametrene i henhold til kodningen i GB2312, i stedet for at bruge standard UTF-8-kodningen fra .net. Faktisk tilbyder Microsoft tilsvarende funktioner, så vi behøver ikke selv at bruge regulære udtryk til at analysere URL-strenge.
Demokoden er som følger:
streng q = Request.Url.Query;
System.Collections.Specialized.NameValueCollection nv = System.Web.HttpUtility.ParseQueryString(q, System.Text.Encoding.GetEncoding("GB2312")); Response.Write(nv["Tag"]);
Lad os bruge Lutz Roeders .NET Reflector til at se på implementeringen af System.Web.HttpUtility.ParseQueryString-metoden: Hvis vi bliver ved med at tjekke igen, kan vi se, at koden, der til sidst håndterer URL-parameterstrengsanalysen, er som følger:
Følgende funktion i System.Web.HttpValueCollection-klassen implementerer parsing af URL-parameteren Her ser vi, at det er en analyse udført af hver karakter.
Hvad angår hvilken slags kodningsmetode den anden part giver os, er det bedst at sende den som en parameter, så vi kan dekryptere den i henhold til brugerens parameter. |