Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 16446|Odpověď: 2

[ASP.NET] Kódování a dekódování URL v ASP.NET

[Kopírovat odkaz]
Zveřejněno 12.01.2016 13:04:21 | | | |

Podívejme se na následující dvě URL, procházejí stejnými parametry?
aaa.aspx?tag=.net%bc%BC%ca%f5
aaa.aspx?tag=.net%e6%8a%80%e6%9c%af

Zdá se, že je to jiné, ale ve skutečnosti všechny používají UrlEncode pro ".net technologii", přičemž jeden je kódování GB2312 a druhý kódování Utf-8.
Následující kód může dosáhnout výše uvedeného kódovacího efektu:

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 skutečné webové stránky mohou být vyvolávány jinými programy.
Například Chinese Simplified musí stránka ASP v operačním systému předat čínský parametr na ASP.net stránku.
Ve výchozím nastavení na čínských zjednodušených operačních systémech bude metoda ASP Server.UrlEncode kódovat čínštinu s kódováním GB2312.
Ale ve výchozím nastavení jsou ASP.net stránky kódovány v UTF-8.
V tomto případě, když použijete Request.QueryString["Tag"] k přijetí hodnoty, nebudete schopni přijímat čínské informace a při postupném ladění uvidíte zkreslené znaky.
V tuto chvíli, i když je Request.QueryString["Tag"] přijímán s nerozešitými znaky, URL v tuto chvíli není zkreslená.

Řešením je analyzovat parametry v URL sami a poté dešifrovat hodnoty parametrů podle kódování GB2312, místo použití výchozího UTF-8 kódování .net.
Microsoft dokonce poskytuje odpovídající funkce, takže nemusíme sami používat regulární výrazy k analýze URL řetězců.

Demo kód je následující:

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žijme .NET Reflector od Lutze Roedera k analýze implementace metody System.Web.HttpUtility.ParseQueryString:
Pokud se budeme stále vracet, vidíme, že kód, který nakonec zpracovává analýzu řetězců parametrů URL, je následující:

Následující funkce třídy System.Web.HttpValueCollection implementuje parsování parametru URL
Zde vidíme, že jde o analýzu prováděnou 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írovat kód


Co se týče toho, jakou metodu kódování nám druhá strana předá, je nejlepší ji předat jako parametr, abychom ji mohli dešifrovat podle tohoto parametru uživatele.




Předchozí:Budu si dům vyzdobovat na ateliér pro práci?
Další:AssemblyInfo.cs konkrétním vysvětlením parametrů souboru
 Pronajímatel| Zveřejněno 04.12.2024 17:15:50 |
Kódování a dekódování URL .NET Core

 Pronajímatel| Zveřejněno 04.12.2024 17:35:32 |
Různé znakové sady jsou kódovány následovně:



Kód:



Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com