10

在尝试显示 URL 查询字符串中提供的特殊字符(德语重音字符)时,我在 Internet Explorer 中发现了一个奇怪的问题,特别是 IE9。这在 Firefox 和 Chrome 中按预期工作。

例如,我正在使用的 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"/>

我还通过 Fiddler 查看了页面的标题和内容,所有编码都是正确的。

什么可能导致 IE 无法正确显示特殊字符?

4

1 回答 1

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 中修复。

于 2013-02-01T22:30:44.173 回答