Javascript 为什么Firebase动态链接的longDynamicLink参数中链接中的编码空格字符(%20)更改为%2B
我正在手动构建一个动态链接url(),然后将其发送到Firebase动态链接API,格式与要缩短的url一致 我要缩短的url中有一个空格字符。在动态链接参数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
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的代码
如果我提供urlhttp://example.com/?q=abc def
或http://example.com/?q=abc%20def
,缩写的urlhttps://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
。