为啥 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 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
(带有加号,而不是空格)。
为什么会这样?
询问的原因是因为在我的情况下,空格和+
之间存在区别,因为参数的值(“产品”的名称)由可以命名一个产品的用户提供name name
和第二个产品name+name
。然后缩短的网址会发生冲突(因为+
也被编码为%2B
)。
【问题讨论】:
这听起来像是标准的 URL 编码,其中空格被转换为加号。 是的。但在我的情况下,加号和空格之间存在区别 - 参数是用户提供的名称(例如产品名称),可能有 2 个产品,一个名为name name
,另一个名为 @ 987654342@。 ... 将其添加到问题中,应该提及但忘记了。
如果它实际上是 name+name
而不是 name name
会发生什么?我敢打赌你会看到一些不同的东西。
name+name
和 name name
的短网址相同。
【参考方案1】:
尝试解码参数。说:decodeURI(param.replace(/\+/g, '%20'))
其中param
是参数的字符串。
【讨论】:
以上是关于为啥 Firebase 动态链接的 longDynamicLink 参数中链接中的编码空格字符 (%20) 更改为 %2B的主要内容,如果未能解决你的问题,请参考以下文章
为啥通过动态链接导航后pushViewController 不起作用?