我有一个查询字符串,其参数值包含编码为å
的挪威字符%e5
。该页面包含一个带有action属性的表单,该表单由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
的转换。 (当然还有自我重定向,但这是另一回事。)
任何指针?
答案 0 :(得分: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没有为此提供工具,编写修复程序很快:)