• asp.net url参数中有中文request.querystring 乱码


    说明:
    从这点我们发现:所有的参数输入,都调用了一次:HttpUtility.UrlDecode(str2, encoding);
    结论出来了:
    当客户端js对中文以utf-8编码提交到服务端时,用Request.QueryString接收时,会先以globalization配置的gb2312去解码一次,于是,产生了乱码。
    所有的起因为:
    1:js编码方式为urt-8

    2:服务端又配置了默认为gb2312
    3:Request.QueryString默认又会调用HttpUtility.UrlDecode用系统配置编码去解码接收参数。

    文章补充:
     
    1:系统取默认编码的顺序为:http请求头->globalization配置节点-》默认UTF-8

    2:在Url直接输入中文时,不同浏览器处理方式可能不同如:ie不进行编码直接提交,firefox对url进行gb2312编码后提交。

    3:对于未编码“中文字符”,使用Request.QueryString时内部调用HttpUtility.UrlDecode后,由gb2312->utf-8时,

    如果查不到该中文字符,默认转成"%ufffd",因此出现不可逆乱码。

    4:解决之路
    知道了原理,解决的方式也有多种多样了:
    1:全局统一为UTF-8编码,省事又省心。
     
    2:全局指定了GB2312编码时,url带中文,js非编码不可,如ext.js框架。
    这种方式你只能特殊处理,在服务端指定编码解码,
    因为默认系统调用了一次HttpUtility.UrlDecode("xxx",系统配置的编码),
    因此你再调用一次HttpUtility.UrlEncode("xxx",系统配置的编码),返回到原始urt-8编码参数
    再用HttpUtility.UrlDecode("xxx",utf-8),解码即可。
     
    5:其它说明:默认对进行一次解码的还包括URI属性,而Request.RawUrl则为原始参数


    this
    .Response.Redirect("Report.aspx?Text=生成、保存诊断结果成功!&Stature_Index=" + Stature_Index
    + "&Order=" + Order + "&Stature_Id=" + Stature_Id);//原始方法,直接传递在获取时会出现乱码 this.Response.Redirect("Report.aspx?Text="+ HttpUtility.UrlEncode("生成、保存诊断结果成功!", System.Text.Encoding.GetEncoding("GB2312"))
    +"&Stature_Index=" + Stature_Index + "&Order=" + Order + "&Stature_Id=" + Stature_Id);//改正后的方法,在传递中文时进行编码,然后在获取时,进行解码,可以解决中文乱码的问题。 string str_Text = this.Request.QueryString["Text"];//这种情况会出现乱码 /*可以解决 System.Collections.Specialized.NameValueCollection gb2312Requests = HttpUtility.ParseQueryString(Request.Url.Query, System.Text.Encoding.GetEncoding("GB2312")); string str_Text = gb2312Requests["Text"]; *//*可以解决 string str_Text = HttpUtility.UrlDecode( this.Request.QueryString["Text"],System.Text.Encoding.UTF8); */ if (str_Text != null) { if (str_Text != "生成、保存诊断结果成功!") { script.Alert(str_Text, this.Page); } }

    参考:http://www.2cto.com/kf/201203/123384.html

  • 相关阅读:
    微信小程序(9)--音频及视频弹幕
    VUE 插槽
    ES6 export
    实现服务端向客户端推消息
    制作镜像语言网站
    xss 防护总结
    一步一步webpack 3
    一步步学习webpack2 配置
    一步步学习webpack 1
    node 插件
  • 原文地址:https://www.cnblogs.com/chiyueqi/p/3520915.html
Copyright © 2020-2023  润新知