Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 16446|Odpowiedź: 2

[ASP.NET] Kodowanie i dekodowanie URL w ASP.NET

[Skopiuj link]
Opublikowano 12.01.2016 13:04:21 | | | |

Przyjrzyjmy się poniższym dwóm URL-om, czy przechodzą te same parametry?
aaa.aspx?tag=.net%bc%bc%ca%f5
aaa.aspx?tag=.net%e6%8a%80%e6%9c%af

Wydaje się, że to inne, ale w rzeczywistości wszystkie używają UrlEncode dla "technologii .net", jednak jedno to kodowanie GB2312, a drugie kodowanie Utf-8.
Poniższy kod może uzyskać powyższy efekt kodowania:

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

Nasze rzeczywiste strony mogą być wywoływane przez inne programy.
Na przykład w Chinese Simplified strona ASP w systemie operacyjnym musi przekazać parametr chiński do ASP.net strony.
Domyślnie, na chińskich uproszczonych systemach operacyjnych, metoda Server.UrlEncode firmy ASP koduje język chiński z kodowaniem GB2312.
Ale domyślnie ASP.net strony są kodowane w UTF-8.
W takim przypadku, gdy użyjesz Request.QueryString["Tag"], aby zaakceptować wartość, nie będziesz mógł zaakceptować informacji chińskich i zobaczysz zniekształcone znaki podczas debugowania krok po kroku.
Obecnie, chociaż Request.QueryString["Tag"] jest akceptowany z zniekształconymi znakami, adres URL nie jest zniekształcony.

Rozwiązaniem jest samodzielna analiza parametrów w URL, a następnie odszyfrowanie wartości parametrów zgodnie z kodowaniem GB2312, zamiast używać domyślnego kodowania UTF-8 w .net.
W rzeczywistości Microsoft również dostarcza odpowiadające im funkcje, więc nie musimy sami używać wyrażeń regularnych do analizy ciągów URL.

Kod demonstracyjny przedstawia się następująco:

string q = Request.Url.Query;

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

Skorzystajmy z .NET Reflector Lutza Roedera, aby przyjrzeć się implementacji metody System.Web.HttpUtility.ParseQueryString:
Jeśli będziemy sprawdzać wspominanie, zobaczymy, że kod, który ostatecznie obsługuje analizę parametrów URL, wygląda następująco:

Następująca funkcja klasy System.Web.HttpValueCollection implementuje parsowanie parametru URL
Tutaj widzimy, że jest to analiza przeprowadzana przez każdą postać.

  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. }
Skopiuj kod


Jeśli chodzi o metodę kodowania, którą przekazuje nam druga strona, najlepiej przekazać ją jako parametr, abyśmy mogli ją odszyfrować zgodnie z tym parametrem użytkownika.




Poprzedni:Czy zamierzam udekorować swój dom na pracownię do pracy?
Następny:AssemblyInfo.cs szczegółowe wyjaśnienie parametrów pliku
 Ziemianin| Opublikowano 04.12.2024 17:15:50 |
Kodowanie i dekodowanie URL .NET Core

 Ziemianin| Opublikowano 04.12.2024 17:35:32 |
Różne zestawy znaków kodowane są następująco:



Kod:



Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com