1

从今天下午开始,我是 C++ 的新手,我很难过。

我有以下行:

const QUrl command("http://192.168.11.11/subdomain/letters?t=somekeyword&p=%01")

但是当在 QNetworkAccessManager 中使用 QUrl“命令”发送时,它实际上是在 % 符号后添加25发送的。现在我知道 QUrl 处于 TolerantMode,并且正在添加它认为这是用户输入错误。

不想要的结果:

http://192.168.11.11/subdomain/letters?t=somekeyword&p=%2501

如何防止我的网址被修改?

我尝试将百分号加倍并插入反斜杠。

任何帮助表示赞赏。谢谢。

4

1 回答 1

3

事实证明这是一个棘手的问题。这是我想出的解决方案:

代码

QByteArray rawQuery("t=somekeyword&p=%01");
QUrl command("http://192.168.11.11/subdomain/letters");
command.setEncodedQuery(rawQuery);
std::cout << command.toEncoded().data();

结果

http://192.168.11.11/subdomain/letters?t=somekeyword&p=%01

笔记

该解决方案依赖于 setEncodedQuery 中描述的一些行为,其中指出

设置要查询的 URL 的查询字符串。字符串按原样插入,调用 toEncoded() 时不执行进一步编码。

如果您需要传递不适合键值模式的查询字符串,或者使用与 QUrl 建议的不同的特殊字符编码方案,则此函数很有用。

将 QByteArray() 的值传递给查询(空 QByteArray)会完全取消设置查询。但是,传递 QByteArray("") 的值会将查询设置为空值,就好像原始 URL 有一个单独的“?”。

参考

于 2014-01-23T19:33:47.400 回答