除了以上字符,其余字符出如今URL之中都必须转义,规则是根据操做系统的默认编码,将每一个字节转为百分号(%)加上两个大写的十六进制字母。好比,UTF-8的操做系统上,http://www.example.com/q=春节...,汉字“春节”不是URL的合法字符,因此被浏览器自动转成http://www.example.com/q=%E6%...。javascript
其中,“春”转成了%E6%98%A5,“节”转成了%E8%8A%82。这是由于“春”和”节“的UTF-8编码分别是E6 98 A5和E8 8A 82,将每一个字节前面加上百分号,就构成了URL编码。html
encodeURI 方法的参数是一个字符串,表明整个URL。它会将元字符和语义字符以外的字符,都进行转义。encodeURIComponent只转除了语义字符以外的字符,元字符也会被转义。所以,它的参数一般是URL的路径或参数值,而不是整个URL。java
decodeURI用于还原转义后的URL。它是encodeURI方法的逆运算。decodeURIComponent用于还原转义后的URL片断。它是encodeURIComponent方法的逆运算。segmentfault
在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,而后再传递给后端,而后由后端进行再次解码。后端
若是使用encodeURI()进行了一遍编码,传过去后,发现解码出现问题,须要使用两次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文编码成%xy的格式,第二次是对%xy中的%进行编码%编码成%25。浏览器
[引用地址](https://segmentfault.com/a/11...编码
HTMLDecode(text) { /*转义 <p><b>123&456<*/ var temp = document.createElement("div"); temp.innerHTML = text; var output = temp.innerText || temp.textContent; temp = null; return output; } HTMLEncode(html) { /**反转义 */ var temp = document.createElement("div"); (temp.textContent != null) ? (temp.textContent = html) : (temp.innerText = html); var output = temp.innerHTML; temp = null; return output; }