URL传参的值含有加号“+”被转换为空格的解决方法
首先先说明下原因。在URI 规范中(第12/13页 https://tools.ietf.org/html/rfc3986),加号是一个保留字符。被处理成空格应该是各个使用端约定俗成的处理方式(譬如 Chrome 中及 Node 的 express 框架用这这种处理方式)。
正确的做法应该是下发前将参数值encode,使其转义成 %2B
。
当然如果真的已经已经发生了,链接是后台同学下方的,没有 encode 的已经发出去了,没法撤回了,怎么办?只能前端来兼容了咯。
下面提供的是我们的一个做法,不一定对所有都合适,因为我们的项目是用的 express 框架。
背景:后台同学下发的链接中 encorpid 参数没有 encode,常规 req.query.encorpid
获取到的值“+”被转换为空格的。
首先从原始 URL 中获取这个不合规范的值:
if (this.req.url && this.req.url.indexOf('encorpid') > -1) {
var encorpidPar = this.req.url.split('encorpid=')[1];
if (encorpidPar) {
encorpidPar = encorpidPar.split('&')[0];
if (encorpidPar.indexOf('+') > -1 || encorpidPar.indexOf('=') > -1 || encorpidPar.indexOf('/') > -1) {
query.encorpid = encorpidPar;
}
}
然后根据自己实际用途自行encodeURIComponent
之。