Web开发离不开URL,URL就是网址,网络标准规定:只有字母和数字[0-9a-zA-Z]、一些特殊符号“$ – _ . + ! * ‘ ( ) , ”[不包括双括号]、以及某些保留字,才可以不经过编码直接用于URL。
因此,为了让我们的网址能够正常访问,我们经常需要对URL——也就是网络地址,进行编码之后再进行访问,常见的情形有两种:
- 通过Get或Post方法发送HTTP请求时;
- 通过ajax发送请求时;
通过Get或Post方法发送HTTP请求时,网页的编码主要有两种决定方式:
一是在页面的头部设置编码:
<meta http-equiv="Content-Type" content="text/html;charset=xxxx">
二是在表单中设置编码:
<form action="form_action.asp" accept-charset="xxxx">
通过ajax发送请求时,编码通常由浏览器进行处理,例如不管你的网页采用什么字符集,IE总是采用“GB2312”来进行编码,Firefox、Chrome总是采用“UTF-8”进行编码。
既然请求方式不同、浏览器不同,都会导致编码方式发生变化,那么我们应该采用什么方式来避免编码不同给我们带来的巨大麻烦呢?其实还是有办法的:
- 采用Javascript函数:escape():
说明:escape()并不是对URL直接进行编码,而是直接对字符进行编码,然后返回一个经过编码之后的Unicode编码值。 - 采用Javascript函数:encodeURI():
说明:encodeURI()是对整个URL进行编码,除了网络标准规定的常见符号,它对“;/?:@&=+$,#”等含特殊意义的字符也不进行编码,编码之后,输出符号的UTF-8形式,并且在每个字节前面加上%。 - 采用Javascript函数:encodeURIComponent():
说明:它是对URL的组成部分进行个别编码,而不是对整个URL进行编码,因此像“;/?:@&=+$,#”等符号在此函数中会被编码,它对应的解码函数是decodeURIComponent()。
这里其实说的都是客户端的设置,另外还需要参考服务端的编码设置->https://www.4spaces.org/tomcat-post-url-encode/ ;