URL编码

网络标准中规定:
只有字母、数字和一些特殊符号“$±_!*’()”以及一些保留字可以不进行编码直接用于URL。而其他的字符和文字用于URL时,不同的浏览器对URL的编码是不同的。
1) URL要统一的命名因特网上所有的资源,这就意味着它要通过不同的协议安全的传输这些资源,但是有一些传输协议在传输的过程中会自动剥去某些字符。导致URL上可以出现的字符的种类受限。
2) URL还需要是完整的,人们希望URL上可以出现其他的不安全的字符或者汉字,但是为了适用于所有的网络传输协议,需要一种转义机制,将不安全的字符转义成安全的字符。

为了实现URL上字符的完整性,提出一种转义机制,将一些不安全的字符转义成安全字符,另外,一些保留字符在将其用于保留用途之外的其他场合时,一定要将其进行转义,不然其他的应用程序可能会对它产生迷惑。
比如:以下字符都是在URL中有特殊作用。
%:保留字,作为编码字符的转义标志
?:保留字,作为查询字符串的标志
.:保留字,在路径组件中使用
/:保留字,在路径组件中作为分隔字符
#:保留字,作为分段定界符使用
等等

前端为什么要对URL进行编码?
例1:假设URL上有这样一段参数,name1=value1&name2=value2
当该URL传输到服务器端时,上述字符串在计算机中用ASCII码表示为:

6E616D6531 3D 76616C756531 26 6E616D6532 3D 76616C756532对应关系:
6E616D6531   -->  name1 
3D           -->  =
76616C756531 -->  value1 
26           -->  & 
6E616D6532   -->  name2 
3D           -->  = 
76616C756532 -->  value2

服务器端在接收到该数据后会依次遍历该字节流,识别=和&,可以解析出从客户端传过来的参数,表明它是两个键值对。
如果参数里面包含=或者&这种特殊字符咋办?
比如name1=va&lu=el,这样服务器就会误以为我们传输的是两个键值对,就会造成歧义。为了解决上述问题,我们可以对参数进行编码,编码后“name1=va%26lu%3D”,这样服务器就会正常解析出参数,把%后面的参数当成正常的字符。
总结:当参数中出现特殊字符时一定要对参数进行编码

例2:当URL参数中包含一个URL时,一定要进行编码
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=http://api.baidu.com/callback.php
这样的URL一定会出问题,所以一定要对http://api.baidu.com/callback.php进行编码,再放到地址中发送。

例3:假如URL中有中文时,一定要进行编码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值