Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 16446|Válasz: 2

[ASP.NET] URL kódolás és dekódolás ASP.NET

[Linket másol]
Közzétéve 2016. 01. 12. 13:04:21 | | | |

Nézzük meg a következő két URL-t, ugyanazokat a paramétereket adják át?
aaa.aspx?tag=.net%bc%bc%ca%f5
aaa.aspx?tag=.net%e6%8a%80%e6%9c%af

Úgy tűnik, más, de valójában mind UrlEncode-ot használnak ".net technológiához", de az egyik GB2312 kódolás, a másik Utf-8 kódolás.
A következő kód képes elérni a fenti kódolási hatást:

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

A valódi weboldalainkat más programok is hívhatják meg.
Például a Chinese Simplified (Chinese Simplified segítségével) egy operációs rendszer ASP oldalának kínai paramétert kell átadnia egy ASP.net oldalra.
Alapértelmezés szerint a kínai egyszerűsített operációs rendszereken az ASP Server.UrlEncode módszere GB2312 kódolással kódolja a kínai nyelvet.
De alapértelmezés szerint ASP.net oldalak UTF-8-ban vannak kódolva.
Ebben az esetben, amikor az érték elfogadásához használja az Request.QueryString["Tag"] funkciót, nem tudsz kínai információt elfogadni, és lépésről lépésre hibázott karaktereket fogsz látni.
Jelenleg bár az Request.QueryString["Tag"] elfogadható zavaros karakterekkel, az URL jelenleg nem zavaros.

A megoldás az, hogy magad elemezed az URL-ben lévő paramétereket, majd a GB2312 kódolása szerint dekódolod a paraméterek értékeit, ahelyett, hogy a .net alapértelmezett UTF-8 kódolását használnád.
Valójában a Microsoft hasonló funkciókat kínál, így nem kell rendszeres kifejezéseket használnunk az URL-láncok elemzéséhez.

A demográfiai kód a következő:

string q = Request.Url.Query;

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

Használjuk Lutz Roeder .NET Reflector-ját a System.Web.HttpUtility.ParseQueryString módszer megvalósításához:
Ha folyamatosan visszanézünk, láthatjuk, hogy a kód, amely végül kezeli az URL paraméter string elemzést, a következő:

A System.Web.HttpValueCollection osztály következő funkciója valósítja meg az URL paraméter elemzését
Itt azt látjuk, hogy minden karakter által végzett elemzés.

  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. }
Kód másolása


Ami azt illeti, hogy a másik fél milyen kódolási módszert ad nekünk, a legjobb, ha paraméterként adjuk át, hogy a felhasználó paramétere szerint tudjuk dekódolni.




Előző:A házamat stúdióvá fogom rendezni, hogy dolgozzak?
Következő:AssemblyInfo.cs a fájlparaméterek konkrét magyarázata
 Háziúr| Közzétéve 2024. 12. 04. 17:15:50 |
.NET Core URL kódolás és dekódolás

 Háziúr| Közzétéve 2024. 12. 04. 17:35:32 |
A különböző karakterkészletek a következőképpen vannak kódolva:



Kód:



Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com