JS中URL编码与.net URL解码 (待分析出错原因)

javascript函数的体例:

    encodeURI("url地点")//编码

    decodeURI("url地点")//解码

  asp.net的体例:

    Server.UrlEncode("url地点")//编码

    Server.UrlDecode("url地点")//解码

  ps:可以用js编码.net解码.也就是它们编码解码体例是一样的.它们的返回值都是编码或解码后的URL字符串.

  JS编码,C#解码

  利用JS对URL中的特殊字符的URL编码,函数是encodeURIComponent,这个函数编码等于C#中的Server.UrlEncode体例。

  在C#中,利用Request.QueryString[""].ToString()可以直接对编码后的字符串进行解码,也可利用Server.UrlDecode体例进行解码。

  在C#中,可利用Request.Url.OriginalString来得到URL,假定利用Request.Url.ToString(),得到到的地点则是解码过的。

  在C#中SubString中的第二个参数是要得到的字符的长度,而JS中则表现竣事字符的地位。

  JS:var u=encodeURIComponent(unit);

  C#:Server.UrlDecode(Request["unit"]);

  网上查到的全都是escape,和必要的编码不是一回事,好不轻易找到的成果。

  生存下来以备以后利用。

  js对笔墨举办编码触及3个函数:escape,encodeURI,encodeURIComponent,

  相应3个解码函数:unescape,decodeURI,decodeURIComponent

   

  1、 转达参数时必要利用encodeURIComponent,如许组合的url才不会被#等特殊字符截断。 

  比喻:<script language="javascript">document.write('<a href="http://passport.百度.com/?logout&aid=7&u='+encodeURIComponent("http://cang.百度.com/bruce42")+'">退出</a>');</script>

  2、 举办url跳转时可以团体利用encodeURI

  比喻:Location.href="/encodeURI"("http://cang.百度.com/do/s?word=百度&ct=21");

  3、 js利用数据时可利用escape

  比喻:搜躲中history记载。

  4、 escape对0-255以外的unicode值举办编码时输出%u****格式,别的环境下escape,encodeURI,encodeURIComponent编码成果不异。

  最多利用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,以是假定给背景转达参数必要利用encodeURIComponent时必要背景解码对utf-8撑持(form中的编码体例和当前页面编码体例不异)

  escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

  encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

  encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

  根据阐明 我必要的是encodeURIComponent函数

以上转载http://blog.163.com/da7_1@126/blog/static/104072678201110803312661/

自己实测总结:当我在js中encodeURI()编码或escape(),通过ajax 传值到C#后台时使用

Server.UrlEncode(Request.QueryString["username"])也不行
System.Web.HttpUtility.UrlEncode(Request.QueryString["username"], System.Text.Encoding.GetEncoding("GB2312"));
System.Web.HttpUtility.UrlEncode(Request.QueryString["username"], System.Text.Encoding.UTF8);

都会出现解码失败问题,解决方案

1可使用ajax中的 data:{ "name":测试 },直接传值

2.在C#后台中使用context.Request.QueryString["name"].toString()直接解码;

至于为什么直接解码失败继续研究

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值