Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 22544|Svar: 0

[Källa] c# Begäran tar emot förvrängda tecken för parametrar

[Kopiera länk]
Publicerad på 2015-12-25 18:41:49 | | | |


I morse fick jag en fråga av en kollega: Jag sa att de mottagna parametrarna var förvrängda, låt mig hjälpa till att lösa det.


Plattformen som min kollega ansvarar för är byggd Ext.js ramverk, och konfigurationsfilen web.config är konfigurerad med den globala "GB2312"-kodningen:

<globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="gb2312" culture="zh-CN"/>

När frontend skickar in "kinesisk text" får backend förvrängda tecken med Request.QueryString["xxx"].

Oavsett hur du avkodar med System.Web.HttpUtility.UrlDecode("xxx", "encoding type") fungerar det inte.

Huvudbeskrivning:
1: Det första att avgöra är att när klientens URL-parametrar skickas in, kommer Ext.js att koda dem innan de skickas in, och klientens kodning är UTF-8-kodning som standard


2: Varför är det då förvrängt när man tar emot parametrar med Request.QueryString["xxx"]?

Vi vänder på kompileringen steg för steg,
2.1: Titta på koden för egenskapen QueryString:


2.2: Skär in i FillInQueryStringCollection()-metoden


2.3: Klipp: QueryStringEncoding

Från QueryStringEncoding-koden går systemet tillbaka till kodningsmetoden för globaliseringskonfigurationsnoden, och om inte, är standarden UTF-8-kodning
2.4: Skär i FillFromString (sträng s, bool urlencoded, kodningskodning)

Från denna punkt finner vi att alla parameterindata anropas en gång: HttpUtility.UrlDecode(str2, kodning);

När klient js skickar in kinesiska till servern i utf-8-kodning, kommer den först att avkoda den med Request.QueryString när den tas emot med gb2312 konfigurerad av globalisering, vilket resulterar i förvrängda tecken.

1: JS-kodningsmetoden är URT-8

2: Serversidan har konfigurerat standardinställningen till GB2312

3: Request.QueryString anropar HttpUtility.UrlDecode som standard för att avkoda de mottagna parametrarna med systemkonfigurationskodning.

1: Systemet väljer standardkodningen i följande ordning: http-begäran-header - >globaliseringskonfigurationsnod - standard UTF-8

2: När URL:en matas in direkt till kinesiska kan olika webbläsare hantera det olika, till exempel: IE kodar inte och skickar in direkt, Firefox skickar in URL:en efter GB2312-kodningen.

3: För okodade "kinesiska tecken", efter att ha använt Request.QueryString internt anrop HttpUtility.UrlDecode, av gb2312->utf-8,

Om det kinesiska tecknet inte hittas kommer det att konverteras till "%ufffd" som standard, vilket resulterar i irreversibla förvrängda tecken.

4: Vägen till lösning
Med tanke på principen finns det många sätt att lösa den:
1: Den globala föreningen är UTF-8-kodning, vilket sparar besvär och oro.

2: När GB2312 är globalt specificerad är url:en kinesisk och js måste kodas, till exempel ext.js ramverk.

På så sätt kan du bara hantera det speciellt, genom att specificera kodning och avkodning på serversidan.
Eftersom standardsystemet anropar HttpUtility.UrlDecode("xxx", kodningen av systemkonfigurationen) en gång,
Så du anropar HttpUtility.UrlEncode("xxx", kodningen konfigurerad av systemet) igen för att återgå till den ursprungliga urt-8-kodningsparametern

Använd sedan HttpUtility.UrlDecode("xxx", utf-8) för att avkoda den.
sträng AAA = begäran. Request.QueryString["admin"];    Husägare
                            sträng a1 = HttpUtility.UrlEncode(aaa, System.Text.Encoding.GetEncoding("GB2312"));
                            sträng a2 = HttpUtility.UrlDecode(a1,System.Text.Encoding.UTF8);








Föregående:Hej
Nästa:Vilken algoritm, jag har varit deprimerad i flera dagar.
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com