Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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.
Следующий код может получить вышеуказанный эффект кодирования:

строка tmp1 = System.Web.HttpUtility.UrlEncode(".net technology", System.Text.Encoding.GetEncoding("GB2312"));
строка 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["Tag"]);

Давайте воспользуемся .NET Reflector Lutz Roeder, чтобы рассмотреть реализацию метода 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 конкретное объяснение параметров файла
 Хозяин| Опубликовано 04.12.2024 17:15:50 |
Кодирование и декодирование URL .NET Core

 Хозяин| Опубликовано 04.12.2024 17:35:32 |
Различные наборы символов кодируются следующим образом:



Код:



Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com