如何将URL查询中的“+”解码为空格?

问题描述 投票:0回答:1

我正在尝试使用 urlencoding (版本 2.1.3)从 URL 中解码日期时间,如下所示:

fn main() {
    let result = urlencoding::decode("gmt_create=2024-05-05+11%3A14%3A19");
    print!("{}", result.unwrap_or_default().into_owned());
}

如何使日期和时间与空格连接(即替换加号)?我希望这个结果看起来像:

gmt_create=2024-05-05 00:05:28

我也尝试过像这样使用percent-encoding,但它仍然留下了“+”:

use percent_encoding::percent_decode_str;

fn main() {
    let encoded_str = "gmt_create=2024-05-05+11%3A14%3A19";
    let decoded_str = percent_decode_str(encoded_str).decode_utf8().unwrap();
    println!("Decoded string: {}", decoded_str);
}
url rust query-string
1个回答
2
投票

我建议您使用 form-urlencoded 板条箱。有一些细微差别,

+
不会在 URL 中进行解析(查询字符串除外),因此 urlencoding 和百分比编码 crate 不合适。

令人烦恼的是,这个板条箱没有简单地将字符串解码为另一个字符串的方法,它仅将其解析为键值对迭代器。但我希望你能成功:

use form_urlencoded; // 1.2.1

fn main() {
    let (key, value) = form_urlencoded::parse("gmt_create=2024-05-05+11%3A14%3A19".as_bytes())
        .next()
        .unwrap_or_default();

    println!("{key}={value}");
}
gmt_create=2024-05-05 11:14:19
© www.soinside.com 2019 - 2024. All rights reserved.