Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 16446|Отговор: 2

[ASP.NET] Кодиране и декодиране на URL адреси в ASP.NET

[Копирай линк]
Публикувано в 12.01.2016 г. 13:04:21 ч. | | | |

Нека разгледаме следващите два URL адреса, преминават ли те едни и същи параметри?
aaa.aspx?tag=.net%bc%bc%ca%f5
aaa.aspx?tag=.net%e6%8a%80%e6%9c%af

Изглежда различно, но всъщност всички използват UrlEncode за ".net технология", но едното е GB2312 кодиране, а другото е Utf-8 кодиране.
Следният код може да получи горния ефект на кодиране:

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

Нашите реални уеб страници могат да бъдат използвани от други програми.
Например, китайска опростена ASP страница в операционната система трябва да предаде китайски параметър на ASP.net страница.
По подразбиране, при китайски опростени операционни системи, методът Server.UrlEncode на ASP ще кодира китайски с GB2312 кодиране.
Но по подразбиране ASP.net страници са кодирани в UTF-8.
В този случай, когато използвате Request.QueryString["Tag"], за да приемете стойността, няма да можете да приемате китайска информация и ще видите неясни знаци при стъпка по стъпка дебъгване.
В момента, въпреки че Request.QueryString["Tag"] се приема с изкривени знаци, URL адресът в момента не е изкривен.

Решението е да анализирате параметрите в URL адреса сами и след това да декриптирате стойностите на параметрите според кодирането на GB2312, вместо да използвате стандартното UTF-8 кодиране на .net.
Всъщност Microsoft също предоставя съответните функции, така че не е нужно да използваме регулярни изрази, за да анализираме URL низове.

Кодът на демонстрацията е следният:

низ q = Request.URL.Query;

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

Нека използваме .NET Reflector на Лутц Рьодер, за да разгледаме имплементацията на метода System.Web.HttpUtility.ParseQueryString:
Ако продължим да проверяваме, можем да видим, че кодът, който най-накрая обработва анализа на низовете на параметъра на URL, е следният:

Следната функция на класа System.Web.HttpValueCollection реализира разбора на параметъра URL
Тук виждаме, че това е анализ, извършен от всеки персонаж.

  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. }
Копирай код


Що се отнася до това какъв метод за кодиране ни предава другата страна, най-добре е да го предадем като параметър, за да можем да го декриптираме според този параметър на потребителя.




Предишен:Ще украся ли къщата си в студио, за да работя?
Следващ:AssemblyInfo.cs конкретното обяснение на параметрите на файла
 Хазяин| Публикувано в 4.12.2024 г. 17:15:50 ч. |
.NET Core URL кодиране и декодиране

 Хазяин| Публикувано в 4.12.2024 г. 17:35:32 ч. |
Различните набори от знаци са кодирани по следния начин:



Код:



Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com