为什么需要对 url 做 2 次转义呢

来源:5-3 处理请求 url 参数 - 实现 url 参数处理逻辑

慕UI0101873

2019-05-14

在处理url参数小节中, 为什么需要对 url 做 2 次转义呢

function encode(val: string): string {
  return encodeURIComponent(val)
    .replace(/%40/g, '@')
    .replace(/%3A/gi, ':')
    .replace(/%24/g, '$')
    .replace(/%2C/gi, ',')
    .replace(/%20/g, '+')
    .replace(/%5B/gi, '[')
    .replace(/%5D/gi, ']')
}

这样转一下是不是把 encode 了的 url 又 decode 了呢
我试过不做 replace 这些字符, 在 express 和前端 也是一样的结果.

写回答

1回答

ustbhuangyi

2019-05-14

效果是一样的,这个是为了保持和官网 axios 一样的参数处理规则,它们认为这些特殊字符不应该被转义,但我也没找到相关的规范。当然 axios 也可以支持用户自定义参数处理规则,未来我们也会支持这个 feature。

0
2
Charles_So_网页开发
我做了下试验,axios默认的转义规则跟课程中不一样,axios默认没有对 : $ , [ ] 做转义。但对@、+、' '空格做了转义。 ( @ => %40) ( + => $2B) ( 空格 => + )
2020-09-07
共2条回复

下一代前端开发语言 TypeScript从零重构axios

课程从零开始重构功能完整的JS库,是学习造轮子的不二之选!

2629 学习 · 877 问题

查看课程