gpt4 book ai didi

c++ - 编码加号问题(执行 Poco::URI::setQueryParameters 和 Poco::URI::getQueryParameters 给出意外结果)

转载 作者:行者123 更新时间:2023-11-30 05:13:17 24 4
gpt4 key购买 nike

假设我有一个带值的 URI 参数,其中包含加号 (+) 和其他特殊字符。

当我执行 URI::setQueryParameters 然后执行 URI::getQueryParameters 时,结果值与原始值不同 - 所有特殊字符都可以,除了加号。

请问,常规方法是什么?


解决方法:使用包含加号的reserved 显式调用URI::encode。但这似乎不对,它确实看起来是一种解决方法。
无论如何,如果这是实现此目的的正确方法,如果我想避免将来出现此类意外,我应该在 reserved 中包含哪些符号?

其他观察结果: URI::decode 有一个名为 plusAsSpace 的参数(默认为 false),但是这没有帮助。 URI::getQueryParameters 在调用 URI::decode 之前将 + 替换为 (空格)。


这是一个示例代码:

const std::string value_with_plus_signs = "value+with+plus+signs";
Poco::URI::QueryParameters out_params;
out_params.push_back(std::make_pair("param", value_with_plus_signs));

Poco::URI uri("path");
uri.setQueryParameters(out_params);

const auto in_params = uri.getQueryParameters();
std::cout << "Expected: '" << value_with_plus_signs << "', received: '"
<< in_params.front().second << "'" << std::endl;

输出:预期:'value+with+plus+signs',收到:'value with plus signs'

最佳答案

这似乎在 Poco 中已修复(请注意,“+”已添加到默认编码的符号中):

https://github.com/pocoproject/poco/issues/1260 https://github.com/pocoproject/poco/commit/c32e683b6c00950ddfce817dfe8f3fc0b6846455

我用 poco 1.7.9p2 测试了你的代码,我得到了正确的结果。

关于c++ - 编码加号问题(执行 Poco::URI::setQueryParameters 和 Poco::URI::getQueryParameters 给出意外结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44007723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com