• 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;
            }
        
        }
  • 相关阅读:
    【转】nginx(一) nginx详解
    美好生活需要全方位的保障
    Oracle私网mtu滚动修改实施方案
    小知识:后台执行Oracle创建索引免受会话中断影响
    小知识:Oracle RAC添加服务名实现单节点访问
    Windows平台安装Oracle11.2.0.4客户端报错INS-30131
    小知识:如何赋予用户查看所有存储过程和触发器的权限
    小知识:如何判定crontab任务的执行频度
    小知识:解决EXP-00003的报错
    Oracle删除索引规范
  • 原文地址:https://www.cnblogs.com/wangzp/p/2858866.html
Copyright © 2020-2023  润新知