关于encode的转义?

来源:5-2 处理请求 url 参数 - buildURL 函数实现

慕粉0814301592

2019-05-12

黄老师,有一个问题想要请问一下:

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

axios是这样做encode的,但是我并不了解它遵照的是哪一份规范?似乎对于params的哪些东西需要转义,哪些东西不需要的问题,好像并没有一个统一的意见?
https://github.com/axios/axios/issues/1443 类似这样的issue也有不少,许多人需要自定义paramsSerializer 来解决问题。
我在mdn上好像也没找到比较确切的答案? 能请黄老师稍稍解释下吗?

写回答

1回答

ustbhuangyi

2019-05-13

其实这块就是遵循了 axios 默认的一套转义规则,至于规范,我也没有找到。不过正如你说的 axios 支持了自定义 paramsSerializer 来让用户自己定义规则,这块在后面的扩展章节会实现。

我的一个猜测是 axios 团队认为这些特殊字符是可以直接放在 url 上的,不需要被转义。

1
1
慕粉0814301592
非常感谢!
2019-05-15
共1条回复

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

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

2631 学习 · 877 问题

查看课程