我正在编写一个程序,里面有一个小的,自编写的HTTP Server。现在我通过套接字通过POST获取数据。我的问题是,如何在C ++中以最佳方式取消String?我得到的数据如下:
command=foo%26bar
但我希望它是
command=foo&bar
在C ++中实现这一目标的最佳方法是什么?
编辑:如果有人对我的解决方案感兴趣,那么它就是:
void HttpServer::UnescapePostData(std::string & data) {
size_t pos;
while ((pos = data.find("+")) != std::string::npos) {
data.replace(pos, 1, " ");
}
while ((pos = data.find("%")) != std::string::npos) {
if (pos <= data.length() - 3) {
char replace[2] = {(char)(std::stoi("0x" + data.substr(pos+1,2), NULL, 16)), '\0'};
data.replace(pos, 3, replace);
}
}
}
答案 0 :(得分:1)
嗯,没有关于正确术语的正式定义,但这种过程通常被描述为“unescaping”,或“解析”而不是逃避。您想要解析application/x-www-form-urlencoded
- 编码的字符串。
答案很无聊:你就是这样做的。就这样。 application/x/www-form-urlencoded
只做两件事:用“+”符号替换空格,用%xx
替换大多数其他类型的标点符号(包括真正的“+”符号本身),其中xx
是十六进制的八位字节。
所以,你只需卷起袖子就行了。扫描字符串,用空格替换+
字符,并将%xx
的每个出现替换为单个字符,即评估的十六进制八位字节。这个过程没什么特别神秘的。这正是它的样子。