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

Вид: 16009|Ответ: 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
Здесь мы видим, что это анализ, проведённый каждым персонажем.



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




Предыдущий:Собираюсь ли я украсить свой дом в студию для работы?
Следующий: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