inline unsigned char toHex(const unsigned char x) {
return x > 9 ? (x + 'A' - 10) : (x + '0');
}
std::string URLEncode(const std::string &sIn)
{
std::string sOut;
const size_t length = sIn.length();
for (size_t idx = 0; idx < length;) {
const char ch = sIn.at(idx);
if (isalnum(ch))
{
sOut.append(1, ch);
}
else if (isspace(ch) && ((ch != '\n') && (ch != '\r')))
{
sOut.append(1, '+');
}
else
{
sOut.append(1, '%');
sOut.append(1, toHex(ch>>4));
sOut.append(1, toHex(ch%16));
}
idx++;
}
return sOut;
}