UTF-8: 是互联网上使用最广的一种Unicode的实现方式。其是一种变长的编码方式,根据不同的符号而变化字节长度,可以使用1-4个字节表示一个符号。
编码规则:
对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码
对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10
Unicode符号范围(十六进制) | UTF-8编码方式(二进制) |
---|---|
0000 0000-0000 007F | 0xxxxxxx |
0000 0080-0000 07FF | 110xxxxx 10xxxxxx |
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
完整的URL由这几个部分构成:
scheme://host:port/path?query#fragment
window.location.href//整个URL字符串
window.location.protocol//URL的协议部分
window.location.host//URL的主机部分
window.location.pathname//URL的路径部分
window.location.search//查询(参数)部分
window.location.hash//锚点
只有字母和数字[0-9a-zA-Z]、一些特殊符号"$-_.+!*'(),"[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。
现有问题
解决办法:使用JS先对URL编码,然后再向服务器提交,不要给浏览器插手的机会。
具体方式:
encodeURIComponent(): 与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。因此,"; / ? : @ & = + $ , #",这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。其对应的解码为decodeURIComponent()。
encodeURI("mail@example.com")//"mail@example.com"
encodeURIComponent("mail@example.com")//"mail%40example.com"