关于URL编码的总结

0x00 什么是url

在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位符),它是WWW的统一资源定位标志,就是指网络地址。通俗一点来讲,上网的时候就需要网址,比如说在浏览器上输入www.baidu.com,此时浏览器会出现https://www.baidu.com,这个就是URL。
URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。

0x01 为什么要URL编码
网络标准RFC 1738做了硬性规定:只有字母和数字[0-9a-zA-Z]、一些特殊符号"$-_.+!*’(),"[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL.如果需要汉字则需要进行URL编码。在Http协议中参数的传输是"key=value"这种形式对的,如果要传多个参数就需要用“&”符号对键值对进行分割。如"?name1=value1&name2=value2",这样在服务端在收到这种字符串的时候,会用“&”分割出每一个参数,然后再用“=”来分割出参数值,如果在参数值用包含=或者&,例如说“name1=value1”,其中value1的值是“va&lu=e1”字符串,那么实际在传输过程中就会变成这样“name1=va&lu=e1,服务端会解析成两个键值对,即name1=va和lu=e1,这样会造成歧义。URL进行编码后就能解决这个问题。

0x02 URL编码
url编码使用百分号%加上(0123456789ABCDEF)两位字符,默认使用的字符集是ASCII码。不同的浏览器有不同的编码方式,后台服务器接收到的编码方式也不同,这样服务器处理起来比较乱且复杂,需要统一编码。如何进行统一编码呢,不同的浏览器有不同的编码方式?通过JavaScript进行统一的编码,不经过浏览器先通过js进行统一编码。
JavaScript提供了三对函数对URL编码,分别是escape() 、 encodeURI() 、encodeURIComponent ()和他们之间对应的解码函数unescape()、decodeURI()、decodeURIComponent()。

escape():实际上,escape()他的真正作用是返回一个字符的Unicode编码值,不能直接用于URL编码。他的具体规则是对"@ * _ + - . /“以外所有的字符进行编码,除了ASCII字母、数字、标点符号”@ * _ + - . /“以外。
网页在提交表单的时候,如果有空格,则会被转化为+字符。服务器处理数据时,会把+号处理成空格,但是escape()不对+编码。
encodeURI ():Javascript中真正用来对URL编码的函数,他着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号”; / ? : @ & = + $ , #",也不进行编码。编码后,他输出符号的utf-8形式,并且在每个字节前加上%。他对单引号不进行编码。
encodeURIComponent ():他用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。在encodeURI ()不被编码的字符/ ? : @ & = + $ , #会被encodeURIComponent ()进行编码

关于URL编码的总结关于URL编码的总结 php00py 发布了19 篇原创文章 · 获赞 6 · 访问量 1万+ 私信 关注
上一篇:Python Fixture——通常用来对测试方法、测试函数、测试类和整个测试文件进行初始化或还原测试环境


下一篇:02_值类型与引用类型