我在Internet Explorer中找到一个奇怪的问题,特别是IE9,当尝试显示URL查询字符串中提供的特殊字符(德文重音字符)时.这在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”]在我的页面上显示“Title”查询字符串值时,IE不会正确显示字符:
Hochaufl�sendes�
如果我直接在页面上直接编码文本,则会在所有浏览器上正确显示.只有当它从问题发生的查询字符串中拉出时.
<Meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
我也通过Fiddler查看了页面的标题和内容,所有的编码都是正确的.
可能导致IE不能正确显示特殊字符?
解决方法
根据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); }