2010-07-05 69 views
0

我有一個查詢字符串,其參數值包含挪威字符å編碼爲%e5。該頁面包含一個帶有操作屬性的表單,該表單由ASP.Net自動填充。當URL輸出到所述屬性時,它將以完整的兩字節編碼打印:%u00e5回發後損壞的編碼

回覆此內容在調試代碼時似乎沒有問題。然而,頁面實際上做了重定向到本身(某些其他原因),並重定向位置頭看起來是這樣的:Location: /myFolder/MyPage.aspx?Param1=%C3%A5

所以%e5已被翻譯爲%C3%A5這在某種程度上打破了輸出。

在HTML文本中,通過HttpUtility.HtmlEncode輸出的破損字符看起來像Ã¥

整個Web應用程序都是ISO8859-1編碼的。

PS。在發佈表單之前,在action屬性中從輸出%u00e5中刪除u00時,所有內容都可以很好地輸出。但錯誤似乎是從%e5%C3%A5的翻譯。 (當然,自我重定向,但這是另一回事。)

任何指針?

+1

這是不是一個錯誤,'%C3%A5'只是URL編碼的UTF-8版本。錯誤在於轉換爲HTML:URL中的每個編碼的UTF-8序列必須轉換回一個Unicode代碼點,然後進行HTML編碼。 – Philipp 2010-07-05 16:18:52

+0

實際上,根據http://www.w3schools.com/tags/ref_urlencode.asp,對於'å'來說,當它是'%e5'時,URL編碼似乎是正確的。似乎問題在於重定向IIS輸出utf-8編碼的'location'頭,即'%e5'被轉換成'%c3%a5' – Polymorphix 2010-07-06 11:30:13

回答

0

我最終解決的解決方案是手動編碼重定向URL。

public void ReloadPage() 
{ 
    UrlBuilder url = new UrlBuilder(Context, Request.Path); 
    foreach (string queryParam in Request.QueryString.AllKeys) 
    { 
     string queryParamValue = Request.QueryString[queryParam]; 
     url.AddQueryItem(queryParam, queryParamValue); 
    } 
    Response.Redirect(url.ToString(), true); 
} 

的url.AddQueryItem基本上沒有HttpContext.Server.UrlDecode(queryParamValue)和url.ToString構建查詢串與每個查詢項確實HttpContext.Server.UrlEncode(queryParamValue)。

的UrlBuilder是一類已經在我們的圖書館存在,所以一旦我發現這個問題,並意識到C#/。NET沒有爲此提供工具,編碼修復很快:)