Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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.
Наступний код може отримати наведений вище ефект кодування:

string 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["Тег"]);

Давайте використаємо .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