2013-01-31 8 views
10

Sto riscontrando un problema strano in Internet Explorer, in particolare IE9, quando si tenta di visualizzare caratteri speciali (caratteri accentati in tedesco) forniti all'interno della stringa di query URL . Funziona come previsto in Firefox e Chrome.Problemi con la codifica dei caratteri UTF-8 dal valore della stringa di query URL in Internet Explorer 9

Ad esempio, l'URL sto lavorando con un look simile a questa:

http://mysite.com/TestPage.aspx?Title=Hochauflösendes® 

Ho anche provato la versione codificata URL del URL:

http://mysite.com/TestPage.aspx?Title=Hochaufl%C3%B6sendes%C2%AE 

In entrambi i casi , quando sto cercando di visualizzare il valore stringa di query "Titolo" sulla mia pagina utilizzando Request.QueryString["Title"], IE non visualizza correttamente i caratteri:

Hochaufl�sendes� 

Se codice il testo direttamente sulla pagina, viene visualizzato correttamente su tutti i browser. È solo quando viene estratto dalla stringa di query in cui si verifica il problema.

La pagina viene salvata come codifica UTF-8, e ho il tag meta nella mia pagina, se necessario:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 

Ho anche guardato intestazione della pagina e contenuti tramite Fiddler, e tutto il la codifica è corretta.

Quale potrebbe essere la causa per cui IE non visualizza correttamente i caratteri speciali?

+1

Non ricordo perché, ma ho lo stesso problema e lo risolvo estraendo manualmente i parametri da 'HttpContext.Current.Request.RawUrl'. Da manuale, intendo che ho creato una funzione personalizzata che ottiene RawUrl ed estrae i parametri e non usa QueryString. – Aristos

+0

@Aristos Questa è una buona idea che vale la pena provare. Ho trovato [questo post] (http://stackoverflow.com/questions/1638499/how-to-get-a-querystring-when-it-is-urlencoded-or-has-percent-characters-in-asp) , che esplora i diversi modi di ottenere il valore, ma suggerisce anche che questo potrebbe essere un bug in IE, anche se questo era del 2009. – cjsharp1

+0

@Aristos Usando 'HttpContext.Current.Request.RawUrl' ha funzionato. Ho quindi recuperato il valore utilizzando il metodo trovato in [questo post] (http://dot-net-web-developer-bristol.blogspot.com/2010/08/getting-parameters-from-rawurl.html). – cjsharp1

risposta

4

Come suggerito da Aristos, l'utilizzo di HttpContext.Current.Request.RawUrl ha funzionato per la mia situazione.

Per recuperare il valore effettivo stringa di query dal RawUrl, un metodo semplice come questo può essere utilizzato:

private string GetQueryStringValueFromRawUrl(string queryStringKey) 
{ 
    var currentUri = new Uri(HttpContext.Current.Request.Url.Scheme + "://" + 
     HttpContext.Current.Request.Url.Authority + 
     HttpContext.Current.Request.RawUrl); 
    var queryStringCollection = HttpUtility.ParseQueryString((currentUri).Query); 
    return queryStringCollection.Get(queryStringKey); 
} 

Recupero il valore tramite questo metodo è stato testato come lavorare in IE8 e IE9. Il bug è stato risolto in IE10.

+2

Sono provato proprio ora. valore di input "iiiĞĞĞiiiŞŞŞ" valore di uscita "iiiÞÞÞÞÞðððÐÐÐÐ" ultima versione del browser. –