如何通过JS实现转码与解码
这篇文章主要介绍了如何通过JS实现转码与解码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
escape和unescape
escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。
采用unicode字符集对指定的字符串除0-255以外进行编码。所有的空格符、标点符号、特殊字符以及更多有联系非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z。
escape()函数用于js对字符串进行编码。
encodeURI和decodeURI
把URI字符串采用UTF-8编码格式转化成escape各式的字符串。
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURI()用于整个url编码
encodeURIComponent和decodeURIComponent
与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。
因此,";/?:@&=+$,#",这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。把URI字符串采用UTF-8编码格式转化成escape格式的字符串。
encodeURIComponent()用于参数的传递,参数包含特殊字符可能会造成间断。
总结
escape编码字符串
简单来说,escape是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读。
编码之后的效果是%XX或者%uXXXX这种形式。
其中ASCII字母数字@*/+等字符不会被编码,其余的都会。
最关键的是,当需要对URL编码时,忘记这个方法,这个方法是针对字符串使用的,不适用于URL。
URL编码encodeURI和encodeURIComponent
对URL编码是常见的事,所以这两个方法应该是实际中要特别注意的。它们都是编码URL,唯一区别就是编码的字符范围,其中
encodeURI方法不会对下列字符编码ASCII字母数字~!@#$&*()=:/,;?+'
encodeURIComponent方法不会对下列字符编码ASCII字母数字~!*()'
所以encodeURIComponent比encodeURI编码的范围更大。
实际例子来说,encodeURIComponent会把http://编码成http%3A%2F%2F而encodeURI却不会。
如果只是编码字符串,不和URL有半毛钱关系,那么用escape。
如果你需要编码整个URL,然后需要使用这个URL,那么用encodeURI。
比如
encodeURI(http://www.cnblogs.com/someotherthing);
编码结果:
http://www.cnblogs.com/some%20other%20thing
其中,空格被编码成了%20。但是如果用了encodeURIComponent,那么结果变为
http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2Fsome%20other%20thing
连"/"都被编码了,整个URL已经没法用了。
当需要编码URL中的参数的时候,那么encodeURIComponent是最好方法
varparam="http://www.cnblogs.com/";//param为参数 param=encodeURIComponent(param); varurl="http://www.cnblogs.com?next="+param; console.log(url)//http://www.cnblogs.com?next=http%3A%2F%2Fwww.cnblogs.com%2F
参数中的"/"可以编码,如果用encodeURI肯定要出问题,因为后面的/是需要编码的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。