Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 16009|Antwoord: 2

[ASP.NET] URL-codering en -decodering in ASP.NET

[Link kopiëren]
Geplaatst op 12-01-2016 13:04:21 | | | |

Laten we eens kijken naar de volgende twee URL's, geven ze dezelfde parameters door?
aaa.aspx?tag=.net%bc%bc%ca%f5
aaa.aspx?tag=.net%e6%8a%80%e6%9c%af

Het lijkt anders te zijn, maar in feite gebruiken ze allemaal UrlEncode voor ".net-technologie", waarbij de ene GB2312-codering is en de andere Utf-8-codering.
De volgende code kan het bovenstaande coderingseffect verkrijgen:

string tmp1 = System.Web.HttpUtility.UrlEncode(".net technology", System.Text.Encoding.GetEncoding("GB2312"));
string tmp2 = System.Web.HttpUtility.UrlEncode(".net technology", System.Text.Encoding.UTF8);

Onze websites kunnen door andere programma's worden aangeroepen.
Bijvoorbeeld, Chinese vereenvoudigde een ASP-pagina op het besturingssysteem moet een Chinese parameter doorgeven aan een ASP.net pagina.
Standaard codeert de Server.UrlCode-methode van ASP op Chinese vereenvoudigde besturingssystemen het Chinees met GB2312-codering.
Maar standaard zijn ASP.net pagina's gecodeerd in UTF-8.
In dit geval, wanneer je Request.QueryString["Tag"] gebruikt om de waarde te accepteren, kun je geen Chinese informatie accepteren en zie je verwarde tekens bij stapsgewijze debugging.
Op dit moment wordt Request.QueryString["Tag"] wel geaccepteerd met verwarde tekens, maar de URL is op dit moment niet vervormd.

De oplossing is om zelf de parameters in de URL te analyseren en vervolgens de waarden van de parameters te ontsleutelen volgens de codering van GB2312, in plaats van de standaard UTF-8-codering van .net te gebruiken.
Microsoft biedt zelfs vergelijkbare functies, zodat we zelf geen reguliere expressies hoeven te gebruiken om URL-strings te analyseren.

De democode is als volgt:

string q = Request.Url.Query;

System.Collections.Specialized.NameValueCollection nv =
System.Web.HttpUtility.ParseQueryString(q, System.Text.Encoding.GetEncoding("GB2312"));
Response.Write(nv["Tag"]);

Laten we Lutz Roeder's .NET Reflector gebruiken om de implementatie van de System.Web.HttpUtility.ParseQueryString-methode te bekijken:
Als we blijven terugkijken, zien we dat de code die uiteindelijk de analyse van URL-parameterstrings afhandelt als volgt is:

De volgende functie van de System.Web.HttpValueCollection-klasse implementeert het parsen van de URL-parameter
Hier zien we dat het een analyse is die door elk personage wordt uitgevoerd.



Wat betreft het soort coderingsmethode dat de andere partij aan ons doorgeeft, is het het beste om die als een parameter door te geven, zodat we deze kunnen ontsleutelen volgens deze parameter van de gebruiker.




Vorig:Ga ik mijn huis inrichten tot een studio om te werken?
Volgend:AssemblyInfo.cs de specifieke uitleg van de bestandsparameters
 Huisbaas| Geplaatst op 04-12-2024 17:15:50 |
.NET Core URL-codering en -decodering

 Huisbaas| Geplaatst op 04-12-2024 17:35:32 |
De verschillende tekenreeksen zijn als volgt gecodeerd:



Code:



Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com