asp页⾯和Asp页⾯传中⽂参数UrlEncode以及接收解码。
JS编码和Asp.。。。
asp页⾯和Asp页⾯传中⽂参数UrlEncode以及接收解码
asp⽤Get⽅式传输的URL为:"WebPage.asp?str="+HttpUtility.UrlEncode(str)
,解码⽅式为HttpUtility.UrlDecode(Request.QueryString["str"].ToString().Trim())
asp的Get⽅式传送为"webPage.aspx?str="+server.urlencode(str) 两种编码不统⼀
解决⽅案:在asp使⽤Get⽅式传送"WebPage.aspx?str="+server.urlEncode( server.URLpathencode(str))
asp GET⽅式传送参数:"WebPage.aspx?str="+ HttpUtility.UrlEncode(
str,System.Text.Encoding.GetEncoding("gb2312"))
asp GET⽅式接收参数:str=
HttpUtility.UrlDecode(Request.QueryString["str"].ToString().Trim(),System.Text.Encoding.GetEncoding("gb2312"))
===================================================================
JS编码和Asp编码
deURIComponent()与HttpUtility.UrlEncode()编码格式⼀样:将⼀个汉字编码为%xx%xx%xx的格式
不会被HttpUtility.UrlEncode编码的字符有:' ( ) * - . _ ! 相⽐较⽽⾔,HttpUtility.UrlEncode⽐deURIComponent多⼀个 ~ 编码
3.不会被deURI编码的字符有: - _ . ! * ( ) ; / ? : @ & = $ , #,与encodeURIComponent对⽐,发现encodeURI不对:;/?:@&=+$,#这些⽤于分隔 URI 组件的标点符号进⾏编码
Asp.Net编码与JS编码的区别:
aspnet和net的区别1. 不会被HttpUtility.UrlEncodeUnicode编码的字符与不会被HttpUtility.UrlEncode编码的字符⼀样,⽽escape和encodeURIComponent不编码的字符不⼀样
2. HttpUtility.UrlEncode和HttpUtility.UrlEncodeUnicode会对/编码,⽽escape和encodeURIComponent会对/编码,encodeURI不会对/编码
3. HttpUtility.UrlEncode()和HttpUtility.UrlEncodeUnicode()会把空格编码为 +,⽽escape,encodeURIComponent,encodeURI都会将空格编码为%20
使⽤ajax提交⼀个字符串:
1. xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
var postStr="val={name:'梅⼩伟',age:19}";
xmlHttp.send(postStr);
val={name:'梅⼩伟',age:19}//发现这⾥没有经过编码,直接以2进制⽅式发送
在服务端index.aspx中打断点,发现Request.Form为:val=%7bname%3a'%u6885%u5c0f%u4f1f'%2cage%3a19%7d(这⾥使⽤了escape编码)使⽤Request.Form[0]取出的值和使⽤Request.Form["val"]取出的都为“{name:'梅⼩伟',age:19}”
2. xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
var deURIComponent("val={name:'梅⼩伟',age:19}");
xmlHttp.send(postStr);
val%3D%7Bname%3A'%E6%A2%85%E5%B0%8F%E4%BC%9F'%2Cage%3A19%7D//发现这⾥使⽤了
在服务端index.aspx中打断点,发现Request.Form为:val%3d%7bname%3a'%u6885%u5c0f%u4f1f'%2cage%3a19%7d(这⾥
居然使⽤了escape编码,⽽不是encodeURIComponent编码),使⽤Request.Form[0]取出的值为“val={name:'梅⼩伟',age:19}”,使
⽤Request.Form["val"]取出的值为null(这是因为客户端发送请求时将=编码为%3d了,如果使⽤deURI这⾥就能取出
Request.Form["val"]为:“{name:'梅⼩伟',age:19}”了)
总结:不是使⽤get或者post,只要都是使⽤form的enctype属性的默认值application/x-www-form-urlencoded,所以如果你要传的值
都会经过deURIComponent()编码再传送(除了值包含空格不会被编码为%20,⽽是编码为+).传到服务器后,可以⽤
Server.UrlDecode()进⾏解码。但是要注意,不管是get⽅式还是post⽅式,enctype为application/x-www-form-urlencoded还是
multipart/form-data,⽤asp在后台查看Request.QueryString和Request.Form的时候,中⽂⼜变成了escape编码格式,例如
Request.Form=__VIEWSTATE=%2fwEPDwUJNzgzNDMwNTMzZGSvF5y%2bl0lztppRS7QNr4qmrF4KTw%3d%3d&mm=%u6556%u5语字母不会被编码,⽽⼀些符号使⽤encodeURIComponent和escape编码后相同,如=,$等等)。
为什么优先使⽤encodeURIComponent⽽不是escape?
escape⽅ 法并不编码字符+。⽽我们知道,在⽤户提交的表单字段中,如果有空格,则会被转化为+字符,⽽服务器解析的时候则会认为
+号代表空格。由于这个缺 陷,escape⽅法并不能正确地处理所有的⾮ASCII字符,你应当尽量避免使⽤escape⽅法,取⽽代之,你最好
选择 encodeURIComponent()⽅法。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论