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

Issues with encoding plus sign (executing Poco::URI::setQueryParameters and Poco::URI::getQueryParameters gives unexpected result)

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

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

请问,常规方法是什么?


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

其他观察: URI::decode 有一个名为 plusAsSpace 的参数(默认为 false),但这没有帮助。 URI::getQueryParameters 在调用 URI::decode.

之前将 + 替换为 </code> (space) <hr> <p>这是一个示例代码:</p> <pre><code>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;

输出:Expected: 'value+with+plus+signs', received: 'value with plus signs'

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

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

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