本节我们来演示 Js中Url编码解码。
使用场景:
假如我们在浏览器地址栏输入发起这个请求:
http://localhost:8080/examples/servlets/servlet/test?n=?&&y==
我们希望server能够这样处理的:n =?&, y ==。
如果我们就这样按下enter,你会发现 浏览器并不会对?&= 编码 就发送出去了,因为它也无法识别哪个=、?、&号是用来分割的啊。浏览器无法识别,server当然也难以识别(报错)啊。
那么我们应该如何解决这类问题呢?
这就是为何Js会提供一个window.encodeUri()和window.encodeUriComponent()给我们。
如下:
<script language="javascript">
document.write('<a href="http://localhost:8080/examples/servlets/servlet/test?n='+encodeURIComponent("?&")+ '&y=' +encodeURIComponent("=")+' ">退出</a>');
</script>
当然,还有参数值就是Url的情况:
<script language="javascript">
document.write('<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a& gt;');</script>
(2)当是form表单时,应该转用js提交。提交前现将<input/>和<textArea/>中的内容先url编码。
常 见函数:【无论什么编码的网页,下面的函数都是基于Utf-8进行Url编码解码】
window.encodeURIComponent():
不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
window.encodeURI():
不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
window.escape():[过时快淘汰,不建议使用]
不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
由上,window.encodeURIComponent() 会比window.encodeURI() 编码得更彻底。
从使用的角度来说:
encodeURI主要用于直接赋值给地址栏时候:
location.href=encodeURI("http://lzx.com/");
而encodeURIComponent主要用于url的query参数:
location.href="http://huangjacky.com/test.php?a="+encodeURIComponent("罗志晓");