| 110 | } |
| 111 | |
| 112 | string UrlEncode(string const & rawUrl) |
| 113 | { |
| 114 | size_t const count = rawUrl.size(); |
| 115 | string result; |
| 116 | result.reserve(count); |
| 117 | |
| 118 | for (size_t i = 0; i < count; ++i) |
| 119 | { |
| 120 | char const c = rawUrl[i]; |
| 121 | if (c < '-' || c == '/' || (c > '9' && c < 'A') || (c > 'Z' && c < '_') || c == '`' || (c > 'z' && c < '~') || |
| 122 | c > '~') |
| 123 | { |
| 124 | result += '%'; |
| 125 | result += NumToHex(c); |
| 126 | } |
| 127 | else |
| 128 | result += rawUrl[i]; |
| 129 | } |
| 130 | |
| 131 | return result; |
| 132 | } |
| 133 | |
| 134 | string UrlDecode(string_view encodedUrl) |
| 135 | { |