Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 16009|Răspunde: 2

[ASP.NET] Codarea și decodarea URL în ASP.NET

[Copiază linkul]
Postat pe 12.01.2016 13:04:21 | | | |

Să aruncăm o privire la următoarele două URL-uri, acestea îndeplinesc aceiași parametri?
aaa.aspx?tag=.net%BC%BC%CA%F5
aaa.aspx?tag=.net%e6%8a%80%e6%9c%af

Pare diferit, dar de fapt toate folosesc UrlEncode pentru "tehnologia .net", însă una este codificare GB2312 și cealaltă codare Utf-8.
Următorul cod poate obține efectul de codare de mai sus:

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

Paginile noastre web pot fi accesate de alte programe.
De exemplu, o pagină ASP simplificată în chineză din sistemul de operare trebuie să transmită un parametru chinezesc către o pagină ASP.net.
Implicit, pe sistemele de operare chinezești simplificate, metoda Server.UrlEncode a ASP va codifica chineza cu codare GB2312.
Dar, implicit, paginile ASP.net sunt codificate în UTF-8.
În acest caz, când folosești Request.QueryString["Tag"] pentru a accepta valoarea, nu vei putea accepta informații chinezești și vei vedea caractere distorsionate în depanarea pas cu pas.
În acest moment, deși Request.QueryString["Tag"] este acceptat cu caractere distorsionate, URL-ul în acest moment nu este distorsionat.

Soluția este să analizezi singur parametrii din URL, apoi să decriptezi valorile parametrilor conform codării GB2312, în loc să folosești codarea implicită UTF-8 a .net.
De fapt, Microsoft oferă în mod similar funcții corespunzătoare, astfel încât nu trebuie să folosim expresii regulate pentru a analiza noi înșine șirurile de URL-uri.

Codul demo este următorul:

șirul q = Request.Url.Query;

System.Collections.Specialized.NameValueCollection nv =
System.Web.HttpUtility.ParseQueryString(q, System.Text.Encoding.GetEncoding("GB2312"));
Răspuns.Scrie(nv["Etichetă"]);

Să folosim .NET Reflector al lui Lutz Roeder pentru a analiza implementarea metodei System.Web.HttpUtility.ParseQueryString:
Dacă verificăm mereu, putem vedea că codul care gestionează în cele din urmă analiza șirurilor parametrilor URL este următorul:

Următoarea funcție a clasei System.Web.HttpValueCollection implementează analizarea parametrului URL
Aici vedem că este o analiză realizată de fiecare personaj.



În ceea ce privește tipul de metodă de codare pe care cealaltă parte ne-o transmite, cel mai bine este să o transmitem ca parametru, astfel încât să o putem decripta conform acestui parametru al utilizatorului.




Precedent:O să-mi decorez casa într-un atelier pentru a lucra?
Următor:AssemblyInfo.cs explicația specifică a parametrilor fișierului
 Proprietarul| Postat pe 04.12.2024 17:15:50 |
Codarea și decodarea URL-urilor .NET Core

 Proprietarul| Postat pe 04.12.2024 17:35:32 |
Diferitele seturi de caractere sunt codificate astfel:



Cod:



Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com