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之。

© DeveWork.com 2018. sitemap  统计 Updated at 2020-02-24 11:11

results matching ""

    No results matching ""