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

Posted

技术标签:

【中文标题】为啥 Firebase 动态链接的 longDynamicLink 参数中链接中的编码空格字符 (%20) 更改为 %2B【英文标题】:Why is encoded space character (%20) in link in longDynamicLink parameter for Firebase Dynamic links changed to %2B为什么 Firebase 动态链接的 longDynamicLink 参数中链接中的编码空格字符 (%20) 更改为 %2B 【发布时间】:2019-08-21 12:25:37 【问题描述】:

我正在手动构建一个动态链接 url (docs),然后以符合 docs 要缩短的格式发送到 Firebase 动态链接 API。

我要缩短的网址中有一个空格字符。 url 在用于动态链接参数longDynamicLink 之前进行了编码(因为它应该是每个documentation)。

我尝试发送“原始”未编码文本,使用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 http://example.com/?q=abc defhttp://example.com/?q=abc%20def,则缩短的 url https://example.page.link/XYZWhttps://example.page.link/?link=http://example.com/?q%3Dabc%2Bdef 的别名,解析为 http://example.com/?q=abc+def(带有加号,而不是空格)。

为什么会这样?

询问的原因是因为在我的情况下,空格和+ 之间存在区别,因为参数的值(“产品”的名称)由可以命名一个产品的用户提供name name和第二个产品name+name。然后缩短的网址会发生冲突(因为+ 也被编码为%2B)。

【问题讨论】:

这听起来像是标准的 URL 编码,其中空格被转换为加号。 是的。但在我的情况下,加号和空格之间存在区别 - 参数是用户提供的名称(例如产品名称),可能有 2 个产品,一个名为 name name,另一个名为 @ 987654342@。 ... 将其添加到问题中,应该提及但忘记了。 如果它实际上是 name+name 而不是 name name 会发生什么?我敢打赌你会看到一些不同的东西。 name+namename name 的短网址相同。 【参考方案1】:

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

【讨论】:

以上是关于为啥 Firebase 动态链接的 longDynamicLink 参数中链接中的编码空格字符 (%20) 更改为 %2B的主要内容,如果未能解决你的问题,请参考以下文章

为啥通过动态链接导航后pushViewController 不起作用?

Firebase 动态链接始终为空

动态创建的 Firebase 动态链接不适用于 Android

无法从 Firebase 缩短的动态链接网址检索动态链接

样式化 Firebase 动态链接

未创建 Firebase 动态链接 - 离子