博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
url的编解码
阅读量:6672 次
发布时间:2019-06-25

本文共 2347 字,大约阅读时间需要 7 分钟。

2、URL的编解码

2.1、特殊字符

url中使用的是ASCII码(8位)字符集中的字符。如东亚地区中文在url中就需要特意编码,规则是在百分号后面接上两个十六进制数字,和其在ASCII字符表中的对应位置相同。

特殊情况:
1、如常见情况不能再url中使用空格字符,当让现在先进浏览器可以自动编码如当访问http://192.168.90.162/advanced search.html 浏览器会自动http://192.168.90.162/advanced%20search.html
2、有些字符使得url非法,因为是保留字符。如斜线字符将会用来分割路径,如果使用斜线字符而不是将其作为路径,则需要转义如斜线(当然:windows下建立文件名不能包含"\/:?<>|"中的任何字符),但是linux很灵活如(touch :a;touch \<a,touch \a,支持转义),url编码中保留的字符:

保留字符 URL编码 保留字符 url编码 保留字符
%3B 3%A
/ 2%F @ %40
& %26 ? %3F

3、不安全字符指那些虽然在URL中没有特殊意义,而可能在URL的上下文中有特殊含义的字符。如双引号在标签中分开属性和值,如果在url中包含有双引号,则浏览器解析时可能错误。此时可以用%22来编码双引号,进而解决冲突。

尽管浏览器智能解析url的编解码
不安全字符编码举例:
< %3C , > %3E , # %23 , % %25, ~ %7E , \ %5C 等。

2.2、urllib.parse模块url编解码方法

quote方法:对URL进行编码;

unquote: 对url进行解码
quote_plus:同quote方法,进一步将空格表示成+符号;
unquote_plus:同unquote方法,将+符号变成空格

>>> r2=quote("/~test aggin &/")>>> r2'/%7Etest%20aggin%20%26/'    #注意空格和&符号都已经编码了,而”/“并没有转换>>> un_r2=unquote(r2)>>> un_r2'/~test aggin &/'>>> quote("~/ test","~/")   #quote第二个参数的使用:当将"~"字符加入忽略字符列表后,再次输出就没有对”~“进行编码了。'~/%20test'

quote_plus使用时会将”/“字符替换成%2F,并将空格字符替换成+符号,这是同quote的主要区别,如下:

>>> quote_plus("/~test aggin &/")'%2F%7Etest+aggin+%26%2F'>>> unquote_plus('%2F%7Etest+aggin+%26%2F')'/~test aggin &/'

2.3、中文的编解码

, 现在主流浏览器chrome,IE,edge等已经能识别了。然而问题不能忽视,对于不安全的字符使用url编码总是不安全的。

>>> quote("中文编码")'%E4%B8%AD%E6%96%87%E7%BC%96%E7%A0%81'>>> unquote('%E4%B8%AD%E6%96%87%E7%BC%96%E7%A0%81')'中文编码'

2.4、查询参数的编码

http两种数据提交方式:get和post。都需要提交查询参数和其值。特别get方法中还会将这种值显示在地址栏中如:

>>> unquote("url%E7%BC%96%E7%A0%81")   ?wd=url%E7%BC%96%E7%A0%81会将值显示在地址栏中'url编码'

对查询参数进行编码的方法:urlencode由urllib.parse模块提供该方法

功能:将查询的参数值对返回成URL编码的新式。参数值对可以是一系列的字典数据。

>>> urlencode([('key1','value1'),('key2','value2')])'key1=value1&key2=value2'>>> help(urlencode)Help on function urlencode in module urllib.parse:

说明1、查询参数为一个(keyword,value)的列表,这里列表的长度为2..注意参数格式列表里面套元组

2、urlencode将参数值对列表编码成了一个URL字符串,查询参数顺序和列表中一致

>>> urlencode([("key1","urlencode编码")])'key1=urlencode%E7%BC%96%E7%A0%81'

urlencode方法还可以接受一个可选参数,用来对输入查询参数中的数据进行控制。默认值False。即当查询数据(keyword,value)列表中的value也为列表时,将其使用整个quote_pluse方法进行编码

>>> urlencode([("keyword",("value1","value2","value3"))])'keyword=%28%27value1%27%2C+%27value2%27%2C+%27value3%27%29'>>> urlencode([("keyword",("value1","value2","value3"))],True) 但当参数为True时,会将value列表中的每个值都和keyword组成一个查询参数值对。'keyword=value1&keyword=value2&keyword=value3'

转载于:https://blog.51cto.com/5918475/2399645

你可能感兴趣的文章
java操作Excel、word和pdf
查看>>
阿里巴巴常考面试题及汇总答案
查看>>
yum install 与 yum groupinstall 的区别
查看>>
Docker Swarm 编排及部署 PostGIS,并操作 GIS 数据
查看>>
当区块链遇上人工智能,这次变革的意义到底有多重大?
查看>>
Linux下安装python
查看>>
Go基础系列:读取标准输入(一)
查看>>
CAD打印文字不显示怎么办
查看>>
js正则表达式全文关键字搜索并高亮
查看>>
Java代理模式
查看>>
PHP协程入门详解
查看>>
Java_Reflect_1
查看>>
HTML中的<table>标签及其子元素标签,JS中DOM对<table>的操作
查看>>
在linux中执行wget命令提示 -bash: wget: command not found 解决方法
查看>>
MobPush推送证书制作
查看>>
springmvc源码解析之配置加载ContextLoadListener
查看>>
SVN就是这么简单
查看>>
网站安全防护工作
查看>>
Java gc中能聊的那些事
查看>>
如何判断一个以太坊地址是不是合约?
查看>>