通过Post Data接收Un-Escape字符串

时间:2014-12-17 11:54:02

标签: c++ http

我正在编写一个程序,里面有一个小的,自编写的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);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

嗯,没有关于正确术语的正式定义,但这种过程通常被描述为“unes​​caping”,或“解析”而不是逃避。您想要解析application/x-www-form-urlencoded - 编码的字符串。

答案很无聊:你就是这样做的。就这样。 application/x/www-form-urlencoded只做两件事:用“+”符号替换空格,用%xx替换大多数其他类型的标点符号(包括真正的“+”符号本身),其中xx是十六进制的八位字节。

所以,你只需卷起袖子就行了。扫描字符串,用空格替换+字符,并将%xx的每个出现替换为单个字符,即评估的十六进制八位字节。这个过程没什么特别神秘的。这正是它的样子。