URL 参数编码

date
Jun 10, 2022
slug
URL 参数编码
status
Published
tags
Frontend
summary
type
Post
发起 HTTP 请求时,可以通过请求参数(query string)向服务器发送数据,形式如下:
🔗
https://example.com/over/there?name=ferret&name2=value2
?字符表示请求参数字符串的起始位置, = 字符用来分隔 key、value, & 字符区分多组参数值,后端 web 框架按照这个约定对 url 进行解析供开发者使用。当 key 或 value 中带有上述特殊字符时,后端 web 框架就无法正确解析请求的参数,例如对于 name=xx=val ,实际上想传递的数据为
{ "name=xx": "val" }
但是由于 key 中存在等号,解析出来的数据为:
{ "name": "xx" }
为了解决这个问题,发送请求参数前要对 key/value 中的特殊字符进行编码。
JavaScript 提供了两个 API 对 URI 进行编码:encodeURIComponent encodeURI,两者的区别在于进行编码的字符集不同,具体的区别可以看这里。encodeURIComponent 的编码范围更大,会把 :/ 等符号都进行编码,所以一般对于整个 URL,使用 encodeURI,而对于 query string 使用 encodeURIComponent。
 

© PanicByte 2021 - 2022