【问题标题】:Sending reserved character as URL parameter value发送保留字符作为 URL 参数值
【发布时间】:2016-03-21 00:17:18
【问题描述】:

我必须按原样发送参数值'AbCd/EfgH'。但是角度将'/' 转义为%2F。我无法控制URL

解决这个问题的最佳方法是什么?

我不想强制 Angular 停止对所有其他 URL 进行编码。

$http.get(URL, {
      params: {
        emv_ref: 'AbCd/EfgH',
        email: email
      }
});

【问题讨论】:

  • 你试过 encodeURIComponent('AbCd/EfgH') 吗?
  • @alexandre encodeURIComponent 会对它进行编码吗? ('/' 到 %2F)。角度会再次对其进行编码。我不想对其进行编码。该值必须按原样附加在 URL 中。
  • 使用 urlencode 时发送什么 url?或者你可以使用'AbCd\/EfgH'
  • url 通常类似于 http://?email=&ref=AbCd%2FEfgH,当我使用 encodeURIComponent 时就像 http://?email=&ref=AbCd%252EfgH。我想要它像 http://?email=&ref=AbCd/FEfgH

标签: angularjs http url get escaping


【解决方案1】:

Angular URL 对所有参数进行编码,你不能只从这个过程中排除一个。您只需要手动编写带有必要参数的 URL。使用方便的$httpParamSerializer 服务来序列化部分参数并将非编码附加到参数字符串:

var params = $httpParamSerializer({email: email}) + '&emv_ref=AbCd/EfgH';
$http.get(URL + '?' + params); 

或者更简洁的方法是使用自定义 paramSerializer 函数:

$http.get(URL, {
    paramSerializer: function(params) {
        return $httpParamSerializer({email: email}) + '&emv_ref=AbCd/EfgH';
    }
});

.. 或者像这样:

$http.get(URL, {
    params: {
        email: email,
        emv_ref: 'AbCd/EfgH'
    },
    paramSerializer: function(params) {
        var ref = '&emv_ref=' + params.emv_ref;
        delete params.emv_ref;
        return $httpParamSerializer(params) + ref;
    }
});

【讨论】:

  • 我在我的配置中定义了 URL,这些 emv_ref 很长。所以你认为这是唯一的方法?
  • 自定义 paramSerializer 看起来不错。会试一试。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 2011-06-30
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
相关资源
最近更新 更多