有人知道颤振URI编码/解码是如何工作的吗?



有人知道扑动URI编码/解码是如何工作的吗?

我有一个问题。我给大家介绍一下这个问题的背景。我们有一个深链接,这将给我们的电子邮件和访问令牌代码重置密码。我们将在前端验证令牌,然后允许用户进行重置。

下面是来自Firebase动态链接的示例URL

https://example.com/auth/resetPassword/?access_token=abcd&email=test+abc@xyz.com

Firebase动态链接将给我们这个URLURI中对象。问题是当我试图从这个URI对象获取查询参数时,它会从电子邮件中删除加号,并用空格字符代替。电子邮件应与上述链接显示的相同。这是我获取查询参数时收到的电子邮件:test abc@xyz.com

我创建了两个飞镖垫来解决这个问题。下面是我将URL解析为URI对象的第一个示例(因为firebase动态链接也是这样做的),并尝试打印输出。如预期的那样,它删除了加号。

代码:

main() {
var httpsUri = Uri.parse("https://example.com/auth/resetPassword/?access_token=abcd&email=test+abc@xyz.com");
print(httpsUri.queryParameters);
}

输出:

{access_token: abcd, email: test abc@xyz.com}

在另一个示例中,我尝试从相同的参数和链接手动创建URI对象。下面是代码

代码:

main() {
var httpsUri = Uri(
scheme: 'https',
host: 'example.com',
path: '/auth/resetPassword/',
queryParameters: {
'access_token': 'abcd',
'email': 'test+abc@xyz.com'
});
print(httpsUri.queryParameters);
}

输出:

{access_token: abcd, email: test+abc@xyz.com}

如果你看到这里,说明邮件显示正确。

我的确切场景是与第一个示例代码匹配。根据我的发现,由于URL的编码和解码,它删除了加号,因为加号在URL中具有特殊的含义。但另一方面,为什么第二个例子没有发生呢?

任何帮助将不胜感激!

+是uri的保留字符,因此如果您想要一个文字+字符,则应编码为%2B

但另一方面,为什么在第二个例子中没有发生?

第二个示例之所以有效,是因为它直接构造了一个Uri对象,如果要将其转换为String,它将为您执行必要的编码。也就是说,print(httpsUri)将输出:

https://example.com/auth/resetPassword/?access_token=abcd&email=test%2Babc%40xyz.com

而不是原始(格式错误)URL:

https://example.com/auth/resetPassword/?access_token=abcd&email=test+abc@xyz.com

最新更新