asp.net后台解码url传递的连接字符串的中文参数

浏览器的url经过编码后发送到服务器。连接字符串的编码根据浏览器的不同编码的方式也不同。可经过测试,chrom ff  ie等 参数部分的编码默认都是gb2312方式的 不同的是浏览器中地址栏中显示的不同。ie地址栏中显示的是未编码的url,点击回车编码后发送到浏览器。chrom 地址栏中是编码后url,如果在chrom的地址栏中的参数部分手写中文 点击回车 则参数部分以utf-8编码发送。

 在服务器端进行参数解码 不知道到底是gb2312还是utf-8 所以解码的时候要做个判断

 

/// <summary>
    /// 对url的连接字符串中的参数进行解码输出
    /// </summary>
    /// <param name="pname">参数名</param>
    /// <param name="dvalue">参数默认值</param>
    /// <returns>解码后的值</returns>
 
 protected string GetQueryString(string pname, string dvalue)
    {
        //1 得到url传来的未解码的参数的值
 
        string url = Request.RawUrl;
 
        string paramenvalue = "";
        string url1 = url.Substring(url.IndexOf('?') + 1);
        if (url1.IndexOf(pname) > 0)
        {
            if (url1.IndexOf('&') > 0)
            {
                string[] parray = url1.Split('&');
                if (parray.Length > 0)
                {
                    for (int i = 0; i < parray.Length; i++)
                    {
                        string[] paramarray = parray[i].Split('=');
 
                        if (paramarray[0] == pname)
                        {
                            paramenvalue = paramarray[1];
 
                        }
                    }
                }
            }
            else
            {
                paramenvalue = url1.Substring(url1.IndexOf('=') + 1);
 
            }
            //2 进行解码 
            //paramvalue是UrlEncode编码字符串 
            Encoding gb2312 = Encoding.GetEncoding("gb2312");
            Encoding utf8 = Encoding.UTF8;
            //首先用utf-8进行解码 
            string enparam = HttpUtility.UrlDecode(paramenvalue, utf8);
            //Response.Write("用utf8解码后:" + classname);
            // 将已经解码的字符再次进行编码. 
            string encode = HttpUtility.UrlEncode(enparam, utf8).ToUpper();
 
            //Response.Write("用utf8编码后" + encode);
            //与原来编码进行对比,如果不一致说明解码未正确,用gb2312进行解码 
            if (paramenvalue != encode)
            {
                //enparam = HttpUtility.UrlDecode(urlparam, gb2312);
                enparam = Request.QueryString[pname];
 
            }
            return enparam;
        }
        else
        {
            return dvalue;
        }
    
    }
posted @ 2013-01-13 21:12  幻想飞鱼  阅读(847)  评论(2编辑  收藏  举报