valid characters in URL https://datatracker.ietf.org/doc/html/rfc3986#section-2.1 https://datatracker.ietf.org/doc/html/rfc3986#section-2.3 https://datatracker.ietf.org/doc/html/rfc3986#section-2.4 space is not allowed by rfc3986, but allowed by brpc
| 105 | // https://datatracker.ietf.org/doc/html/rfc3986#section-2.4 |
| 106 | // space is not allowed by rfc3986, but allowed by brpc |
| 107 | static bool is_valid_char(char c) { |
| 108 | static const std::unordered_set<char> other_valid_char = { |
| 109 | ':', '/', '?', '#', '[', ']', '@', '!', '$', '&', |
| 110 | '\'', '(', ')', '*', '+', ',', ';', '=', '-', '.', |
| 111 | '_', '~', '%', ' ' |
| 112 | }; |
| 113 | |
| 114 | return (isalnum(c) || other_valid_char.count(c)); |
| 115 | } |
| 116 | |
| 117 | static bool is_all_spaces(const char* p) { |
| 118 | for (; *p == ' '; ++p) {} |