欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript、C# URL编码、解码总结

程序员文章站 2023-11-14 21:08:04
javascript部分 encodeuri() (解码为:decodeuri()):不会转义的字符:- _ . ! ~ * ‘ ( ) ;/?:@&=+$,#...

javascript部分

encodeuri() (解码为:decodeuri()):不会转义的字符:- _ . ! ~ * ‘ ( ) ;/?:@&=+$,#

例如:
encodeuri(“//www.jb51.net?a=-_.!~*'();/?:@&=+$,#”)
输出:
“//www.jb51.net?a=-_.!~*'();/?:@&=+$,#”

encodeuricomponent() (解码为:decodeuricomponent() ):不会转义的字符: – _ . ! ~ * ‘ ( )

例如:

encodeuricomponent(“//www.jb51.net?a=-_.!~*'();/?:@&=+$,#”)

输出:

“http%3a%2f%2fwww.jb51.net%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.jb51.net?a=-_.!~*'();/?:@&=+$,#”)

输出:

http%3a%2f%2fwww.jb51.net%3fa%3d-_.!%7e*%27()%3b%2f%3f%3a%40%26%3d%2b%24%2c%23

可见:此方法会对url地址进行编码。但是有一点要知道,就是此方法会把空格编码为+号而不是十六进制的%20,所以此方法编码参数中如果存在空格会造成错误。

uri.escapeuristring(解码:没找到对应的):会对中文、空格等进行转义。

例如:

uri.escapeuristring(“//www.jb51.net?a=中国&123 -_.!~*'();/?:@&=+$,#”)

输出:

//www.jb51.net?a=%e4%b8%ad%e5%9b%bd&123%20%20%20-_.!~*'();/?:@&=+$,#

可见其不会对网址进行编码。

uri.escapedatastring(解码: uri.unescapedatastring):不仅对参数,还会对网址进行编码。

例如:

uri.escapedatastring(“//www.jb51.net?a=中国&123 -_.!~*'();/?:@&=+$,#”)

输出:http%3a%2f%2fwww.jb51.net%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