从URL查询字符串值在Internet Explorer 9 UTF-8字符编码问题(Problem

2019-08-16 16:44发布

我在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"] ,IE不正确显示的字符:

Hochaufl�sendes�

如果我硬编码直接在网页上的文字,就可以正确地显示在所有浏览器。 只有当它是从哪里出现问题的查询字符串拉动。

该页面保存为UTF-8编码,和我有meta在我的网页必要标签:

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

我也看了一下通过提琴手页面的标题和内容,所有的编码是正确的。

什么可能会造成IE无法正常显示特殊字符?

Answer 1:

正如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。



文章来源: Problems with UTF-8 character encoding from URL query string value in Internet Explorer 9