1inline unsigned char toHex(const unsigned char x) {
2 return x > 9 ? (x + 'A' - 10) : (x + '0');
3}
4
5std::string URLEncode(const std::string &sIn)
6{
7 std::string sOut;
8
9 const size_t length = sIn.length();
10 for (size_t idx = 0; idx < length;) {
11 const char ch = sIn.at(idx);
12 if (isalnum(ch))
13 {
14 sOut.append(1, ch);
15 }
16 else if (isspace(ch) && ((ch != '\n') && (ch != '\r')))
17 {
18 sOut.append(1, '+');
19 }
20 else
21 {
22 sOut.append(1, '%');
23 sOut.append(1, toHex(ch>>4));
24 sOut.append(1, toHex(ch%16));
25 }
26 idx++;
27 }
28 return sOut;
29}