C++ でURLEncode

C++でURLEncodeなプログラム無いか探していたけれど,boostのregexを使った巨大な奴とか,やたら凝ったやつしかなくて,もっとシンプルな奴が欲しいのに,それぐらい誰かのせておけよと思ったので,載せておく.

#include <iostream>
#include <string>
#include <stdio.h>

std::string
encode(const std::string &str) {
    std::ostringstream os;

    for (int i = 0; i < str.size(); i++) {
        char c = str[i];
        if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
            (c >= '0' && c <= '9') ||
            c == '-' || c == '_' || c == '.' || c == '~') {
            os << c;
        } else {
            char s[4];
            snprintf(s, sizeof(s), "%%%02x", c & 0xff);
            os << s;
        }
    }

    return os.str();
}