JavaScript、C# URL编码、解码总结
JavaScript部分encodeURI() (解码为:decodeURI()):不会转义的字符:- _ . ! ~ * ‘ ( ) ;/?:@&=+$,# encodeURIComponent() (解码为:decodeURIComponent() ):不会转义的字符: – _ . ! ~ * ‘ ( ) 例如: encodeURIComponent(“//www.52php.cn?a=-_.!~*'();/?:@&=+$,#”) 输出: “http%3A%2F%2Fwww.52php.cn%3Fa%3D-_.!~*'()%3B%2F%3F%3A%40%26%3D%2B%24%2C%23” 区别:对于;/?:@&=+$,#这些字符的处理。 还有个附加的: escape() ,不过 ECMAScript v3 反对使用该方法。原因猜测是根据转义序列有关,escape()的转移序列为: 对于代码单元小于等于0xFF的被替换字符,使用 %xx 格式的两位数转义序列。对于代码单元大于0xFF的被替换字符,使用 %uxxxx 格式的四位数转义序列。 具体的可以研究一下ECMAScript的规范,由于本人道行太浅,就不深入研究了,哈。。 unescape() 同样不推荐使用。 C#部分:C#部分比较混乱,不仅有很多urlencode,还有好多htmlencode。但其实在处理url时我们只关注url部分就好了,html那部分当我们处理html时才会用到,如预防xss攻击时应该就需要那些htmlencode,htmldecode了。 下面说一下url的常用方法: Server.UrlEncode(解码:Server.UrlDecode): Server.UrlEncode使用系統预设编码做为参数调用HttpUtility.UrlEncode编码,所以如果系统全局都用UTF8格式编码,这两个方法就是一样的(至于是否使用了系统预设编码这个还有待考证,没有找到官方说法)。 HttpUtility.UrlEncode(解码:HttpUtility. UrlDecode) 例如:HttpUtility.UrlEncode(“//www.52php.cn?a=-_.!~*'();/?:@&=+$,#”) 输出:http%3a%2f%2fwww.52php.cn%3fa%3d-_.!%7e*%27()%3b%2f%3f%3a%40%26%3d%2b%24%2c%23 可见:此方法会对url地址进行编码。但是有一点要知道,就是此方法会把空格编码为+号而不是十六进制的%20,所以此方法编码参数中如果存在空格会造成错误。 Uri.EscapeUriString(解码:没找到对应的):会对中文、空格等进行转义。 例如: Uri.EscapeUriString(“//www.52php.cn?a=中国&123 -_.!~*'();/?:@&=+$,#”) 输出: //www.52php.cn?a=%E4%B8%AD%E5%9B%BD&123%20%20%20-_.!~*'();/?:@&=+$,# 可见其不会对网址进行编码。 Uri.EscapeDataString(解码: Uri.UnescapeDataString):不仅对参数,还会对网址进行编码。 例如: Uri.EscapeDataString(“//www.52php.cn?a=中国&123 -_.!~*'();/?:@&=+$,#”) 输出:http%3A%2F%2Fwww.52php.cn%3Fa%3D%E4%B8%AD%E5%9B%BD%26123%20%20%20-_.%21~%2A%2 7%28%29%3B%2F%3F%3A%40%26%3D%2B%24%2C%23 所以,总结:不需要编码://可用:JavaScript中用encodeURI,否则用encodeURIComponent,C#中用Uri.EscapeUriString否则用Uri.EscapeDataString (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |