2013-01-31 14 views
10

Znajduję dziwny problem w Internet Explorerze, w szczególności w IE9, podczas próby wyświetlenia znaków specjalnych (niemieckich znaków akcentowanych) podanych w ciągu zapytania adresu URL . Działa to zgodnie z oczekiwaniami w Firefoksie i Chrome.Problemy z kodowaniem znaków UTF z wartości ciągu zapytania adresu URL w przeglądarce Internet Explorer 9

Na przykład adres URL Pracuję z wygląda mniej więcej tak:

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

Próbowałem również URL zakodowane wersja URL:

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

W obu przypadkach , kiedy próbuję wyświetlić wartość ciągu zapytania "Tytuł" na mojej stronie przy użyciu Request.QueryString["Title"], IE nie wyświetla poprawnie znaków:

Hochaufl�sendes� 

Jeśli twardo koduję tekst bezpośrednio na stronie, wyświetla się on prawidłowo we wszystkich przeglądarkach. To tylko wtedy, gdy ciągnie się od ciągu zapytania, w którym występuje problem.

strona jest zapisana jako UTF-8, a ja mam tag meta na mojej stronie w miarę potrzeby:

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

Ja również wyglądał na nagłówku strony i zawartości poprzez Skrzypek, a wszystkie kodowanie jest poprawne.

Co może powodować, że IE nie wyświetla poprawnie znaków specjalnych?

+1

Nie pamiętam, dlaczego, ale mam ten sam problem i rozwiązać go ręcznie wyodrębnić parametry z 'HttpContext.Current.Request.RawUrl'. Ręcznie, mam na myśli, że zrobiłem niestandardową funkcję, która pobiera RawUrl i wyodrębnia parametry i nie używa QueryString. – Aristos

+0

@Aristos To dobry pomysł, warto spróbować. Znalazłem [ten post] (http://stackoverflow.com/questions/1638499/how-to-get-a-querystring-when-it-is-urlencoded-or-has-percent-characters-in-asp) , który bada różne sposoby uzyskiwania wartości, ale sugeruje również, że może to być błąd w IE, chociaż był to rok 2009. – cjsharp1

+0

@Aristos Użycie 'HttpContext.Current.Request.RawUrl' zadziałało. Następnie pobrałem wartość za pomocą metody znalezionej w [tym poście] (http://dot-net-web-developer-bristol.blogspot.com/2010/08/getting-parameters-from-rawurl.html). – cjsharp1

Odpowiedz

4

Zgodnie z sugestią Aristosa, dla mojej sytuacji działało HttpContext.Current.Request.RawUrl.

Aby otrzymać rzeczywistą wartość ciągu kwerendy z RawUrl, prosty sposób jak to można stosować:

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

Odzyskiwanie wartość przy użyciu tej metody badano jak pracuje w IE8 i IE9. Błąd został naprawiony w IE10.

+2

Próbowałem właśnie teraz. wartość wejściowa "iiiœĞĞiiiŞ" wartość wyjściowa "iiiÞÞÞÞÞðððÐÐÐÐ" przeglądarka ostatnia, tj. wersja. –