Javascript 为什么Firebase动态链接的longDynamicLink参数中链接中的编码空格字符(%20)更改为%2B

Javascript 为什么Firebase动态链接的longDynamicLink参数中链接中的编码空格字符(%20)更改为%2B,javascript,firebase-dynamic-links,Javascript,Firebase Dynamic Links,我正在手动构建一个动态链接url(),然后将其发送到Firebase动态链接API,格式与要缩短的url一致 我要缩短的url中有一个空格字符。在动态链接参数longDynamicLink中使用url之前,会对其进行编码(根据需要) 我已尝试发送未编码的“原始”文本,用encodeURI()编码,用encodeURIComponent()编码 这是一个调用的示例代码 axios({ method: 'post', url: "https://firebasedynamiclinks.go

我正在手动构建一个动态链接url(),然后将其发送到Firebase动态链接API,格式与要缩短的url一致

我要缩短的url中有一个空格字符。在动态链接参数
longDynamicLink
中使用url之前,会对其进行编码(根据需要)

我已尝试发送未编码的“原始”文本,用
encodeURI()
编码,用
encodeURIComponent()编码

这是一个调用的示例代码

axios({
  method: 'post',
  url: "https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=my-firebase-key",
  headers: { 'Content-Type': 'application/json' },
  data: {
    longDynamicLink: "https://example.page.link/?link=http://example.com/?q%3Dabc%20def",
    suffix: {
      option: 'SHORT',
    },
  },
}).then(response => {
  return response.data.shortLink;
  // returned value is: https://example.page.link/?link=http://example.com/?q%3Dabc%2Bdef
});
无论我发送什么(空间编码是否为
%20
),firebase始终将其视为
+
(编码为
%2B
)并将其用于随后用作短url的代码

如果我提供url
http://example.com/?q=abc def
http://example.com/?q=abc%20def
,缩写的url
https://example.page.link/XYZW
https://example.page.link/?link=http://example.com/?q%3Dabc%2Bdef
解析为
http://example.com/?q=abc+def
(带加号,不带空格)

为什么会这样


问这个问题的原因是,在我的例子中,空格和
+
是有区别的,因为一个参数(一个“产品”的名称)的值是由一个用户提供的,该用户可以命名一个产品
名称
和第二个产品
名称+名称
。然后缩短的URL会发生冲突(因为
+
也被编码为
%2B
)。

尝试解码参数。比如:
decodeURI(param.replace(/\+/g,'%20'))
其中
param
是一个参数字符串。

这听起来像是标准的URL编码,其中空格被转换为加号。True。但在我的例子中,加号和空格之间有一个区别-参数是一个名称(例如产品名称)这是由用户提供的,可能有两个产品,一个名为
name name
,另一个名为
name+name
…会将此添加到问题中,应该提到它,但忘记了。如果它实际上是
name+name
而不是
name
,会发生什么?我打赌你会看到不同的东西。我得到相同的短url对于
name+name
name-name