11#include <system_error>
16 res.reserve(url_encoded.size());
18 for (
size_t i = 0; i < url_encoded.size(); ++i) {
19 char c = url_encoded[i];
22 if (c ==
'%' && i + 2 < url_encoded.size()) {
23 unsigned int decoded_value{0};
24 auto [p, ec] = std::from_chars(url_encoded.data() + i + 1, url_encoded.data() + i + 3, decoded_value, 16);
28 if (ec == std::errc{} && p == url_encoded.data() + i + 3) {
29 res +=
static_cast<char>(decoded_value);
45 res.reserve(str.size() * 3);
48 auto c =
static_cast<unsigned char>(ch);
50 if ((c >=
'A' && c <=
'Z') || (c >=
'a' && c <=
'z') ||
51 (c >=
'0' && c <=
'9') || c ==
'-' || c ==
'_' || c ==
'.' || c ==
'~') {
56 constexpr char hex_chars[] =
"0123456789ABCDEF";
57 res += hex_chars[(c >> 4) & 0xF];
58 res += hex_chars[c & 0xF];
std::string UrlDecode(std::string_view url_encoded)
std::string UrlEncode(std::string_view str)