1.encodeComponent编码url,url不能直接使用,须要编码php
var rlt = "http://service.weibo.com/share/share.php?"; var url = 'http://www.baidu.com'; var params = { appkey: "379570494", title: "领杉果红包,享更多优惠!点击领取:", url: url }; for (var i in params) { rlt += i + '=' + params[i] + '&'; } for (var i in params) { rlt += i + '=' + encodeURIComponent(params[i]) + '&'; } console.log(rlt);
1.URL就是网址,只要上网,就必定会用到.
只有字母和数字[0-9a-zA-Z],一些特殊符号$-_.+!*'(),以及某些保留字,才能够不通过编码直接用于URL.
2.这意味着,若是URL中有汉字,就必须编码后使用,可是麻烦的是,RFC1738没有规定具体的编码方法,
而是交给应用程序(浏览器)本身决定,这致使'URL编码'成为了一个混乱的领域.
3.包括:ajax请求url地址,浏览器上直接用get或post发出http请求,网址路径中包含汉字,查询字符串包含汉字.
4.使用js先对URL编码,而后再向服务器提交,不给浏览器插手的机会,
由于js的输出老是一致的,因此就保证了服务器获得的数据是格式统一的.ajax
escape()不能直接用于URL编码,他的真正做用是返回一个字符串的Unicode编码值.浏览器
1.encodeURI()是js中真正用来对URL编码的函数
2.它着眼于对整个URL进行编码,所以除了常见的符号之外,对其余一些在网址中有特殊含义的符号;/?:@&=+$,#也不进行编码,
编码后,它输出符号的utf-8形式,而且在每一个字节前加上%服务器
与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码.
所以,;/?:@&=+$,#这些在encodeURI()中不被编码的符号,在encodeURIComponent中通通会被编码.app
var test = 'http://www.baidu.com/my app?search=a&b=3#2哈哈'; var test1 = encodeURIComponent(test); var test2 = encodeURI(test); console.log(test); // http://www.baidu.com console.log(test1); // http%3A%2F%2Fwww.baidu.com%2Fmy%20app%3Fsearch%3Da%26b%3D3%232%E5%93%88%E5%93%88,浏览器没法解析这个地址 console.log(test2); // http://www.baidu.com/my%20app?search=a&b=3#2%E5%93%88%E5%93%88,浏览器没法解析这个地址 var test3 = decodeURIComponent(test1); var test4 = decodeURI(test2); console.log(test3); console.log(test4); var test5 = escape(test); var test6 = unescape(test5); console.log(test5); // http%3A//www.baidu.com/my%20app%3Fsearch%3Da%26b%3D3%232%u54C8%u54C8 console.log(test6); // http://www.baidu.com/my app?search=a&b=3#2哈哈