2013-01-31 67 views
10

在嘗試顯示URL查詢字符串中提供的特殊字符(德語重音字符)時,我在Internet Explorer中發現了一個奇怪的問題,特別是IE9 。 這在Firefox和Chrome中按預期工作。在Internet Explorer 9中使用URL查詢字符串值進行UTF-8字符編碼的問題

例如,我的工作的URL看起來是這樣的:

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

我也試着URL的URL編碼版本:

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

在這兩種情況下, ,當我試圖在我的頁面上使用Request.QueryString["Title"]顯示「標題」查詢字符串值時,IE不會正確顯示字符:

Hochaufl�sendes� 

如果我直接在頁面上對文本進行硬編碼,它會在所有瀏覽器上正確顯示。只有當它從發生問題的查詢字符串中提取時。

頁面保存爲UTF-8編碼,和我在我的頁面在必要時meta標籤:

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

我也看了一下通過提琴手頁面的標題和內容,所有的編碼是正確的。

什麼可能導致IE不能正確顯示特殊字符?

+1

我不記得爲什麼,但我有同樣的問題,並通過手動從'HttpContext.Current.Request.RawUrl'提取參數來解決它。通過手動,我的意思是我已經制作了一個自定義函數來獲取RawUrl並提取參數,而不使用QueryString。 – Aristos

+0

@Aristos這是一個值得嘗試的好主意。我確實發現[這篇文章](http://stackoverflow.com/questions/1638499/how-to-get-a-querystring-when-it-is-urlencoded-or-has-percent-characters-in-asp) ,它探討了獲取價值的不同方式,但也表明這可能是IE中的一個錯誤,儘管這是從2009年開始的。 – cjsharp1

+0

@Aristos使用'HttpContext.Current.Request.RawUrl'工作。然後我使用[本文]中找到的方法檢索了該值(http://dot-net-web-developer-bristol.blogspot.com/2010/08/getting-parameters-from-rawurl.html)。 – cjsharp1

回答

4

正如Aristos所建議的,使用HttpContext.Current.Request.RawUrl適合我的情況。

要檢索來自RawUrl實際查詢字符串值,可以使用這樣一種簡單的方法:

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

檢索使用該方法的值進行了測試,如IE8和IE9工作。該錯誤在IE10中修復。

+2

我剛剛嘗試過。輸入值「iiiĞĞĞiiiŞŞŞ」輸出值「iiiÞÞÞÞÞðððÐÐÐÐ」瀏覽器上次即版本。 –