Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 16446|Odpoveď: 2

[ASP.NET] Kódovanie a dekódovanie URL v ASP.NET

[Kopírovať odkaz]
Zverejnené 12. 1. 2016 13:04:21 | | | |

Pozrime sa na nasledujúce dve URL, prechádzajú rovnakými parametrami?
aaa.aspx?tag=.net%bc%c%ca%f5
aaa.aspx?tag=.net%e6%8a%80%e6%9c%af

Zdá sa, že je to iné, ale v skutočnosti všetky používajú UrlEncode pre ".net technológiu", pričom jedno je kódovanie GB2312 a druhé Utf-8.
Nasledujúci kód môže dosiahnuť vyššie uvedený kódovací efekt:

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);

Naše skutočné webové stránky môžu byť volané inými programami.
Napríklad Chinese Simplified ASP stránka v operačnom systéme musí odovzdať čínsky parameter na ASP.net stránku.
Štandardne na čínskych zjednodušených operačných systémoch metóda Server.UrlEncode od ASP kóduje čínštinu s kódovaním GB2312.
Ale v predvolenom nastavení sú ASP.net stránky zakódované v UTF-8.
V takom prípade, keď použijete Request.QueryString["Tag"] na prijatie hodnoty, nebudete môcť prijať čínske informácie a pri postupnom ladení uvidíte nezrozumiteľné znaky.
V tomto čase, hoci je Request.QueryString["Tag"] akceptovaný s nezrozumiteľnými znakmi, URL adresa v tomto čase nie je skreslená.

Riešením je analyzovať parametre v URL sami a potom dešifrovať hodnoty parametrov podľa kódovania GB2312, namiesto použitia predvoleného UTF-8 kódovania .net.
V skutočnosti Microsoft podobne poskytuje zodpovedajúce funkcie, takže nemusíme sami používať regulárne výrazy na analýzu URL reťazcov.

Demo kód je nasledovný:

string q = Request.Url.Query;

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

Použime Lutz Roederov .NET Reflector na preskúmanie implementácie metódy System.Web.HttpUtility.ParseQueryString:
Ak to budeme kontrolovať späť, vidíme, že kód, ktorý nakoniec spracováva analýzu reťazcov URL parametrov, je nasledovný:

Nasledujúca funkcia triedy System.Web.HttpValueCollection implementuje parsovanie parametra URL
Tu vidíme, že ide o analýzu vykonanú každou postavou.

  1. internal void FillFromString(string s, bool urlencoded, Encoding encoding)
  2. {
  3.       int num1 = (s != null) ? s.Length : 0;
  4.       for (int num2 = 0; num2 < num1; num2++)
  5.       {
  6.             int num3 = num2;
  7.             int num4 = -1;
  8.             while (num2 < num1)
  9.             {
  10.                   switch (s[num2])
  11.                   {
  12.                         case ’=’:
  13.                               if (num4 < 0)
  14.                               {
  15.                                     num4 = num2;
  16.                               }
  17.                               break;
  18.                   }
  19.                   num2++;
  20.             }
  21.             string text1 = null;
  22.             string text2 = null;
  23.             if (num4 >= 0)
  24.             {
  25.                   text1 = s.Substring(num3, num4 - num3);
  26.                   text2 = s.Substring(num4 + 1, (num2 - num4) - 1);
  27.             }
  28.             else
  29.             {
  30.                   text2 = s.Substring(num3, num2 - num3);
  31.             }
  32.             if (urlencoded)
  33.             {
  34.                   base.Add(HttpUtility.UrlDecode(text1, encoding), HttpUtility.UrlDecode(text2, encoding));
  35.             }
  36.             else
  37.             {
  38.                   base.Add(text1, text2);
  39.             }
  40.             if ((num2 == (num1 - 1)) && (s[num2] == ’&’))
  41.             {
  42.                   base.Add(null, string.Empty);
  43.             }
  44.       }
  45. }
Kopírovať kód


Čo sa týka spôsobu kódovania, ktorý nám druhá strana odovzdá, je najlepšie ho odovzdať ako parameter, aby sme ho mohli dešifrovať podľa tohto parametra používateľa.




Predchádzajúci:Budem si dom vyzdobiť na ateliér na prácu?
Budúci:AssemblyInfo.cs konkrétne vysvetlenie parametrov súboru
 Prenajímateľ| Zverejnené 4. 12. 2024 17:15:50 |
Kódovanie a dekódovanie URL v .NET Core

 Prenajímateľ| Zverejnené 4. 12. 2024 17:35:32 |
Rôzne znakové sady sú kódované nasledovne:



Kód:



Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com