| 372 | } |
| 373 | |
| 374 | char *urlencode(const char *s, bool strict) |
| 375 | { |
| 376 | vector<char> d; |
| 377 | while(*s) |
| 378 | { |
| 379 | if(isalnum(*s) || strchr("-_.~", *s) || (!strict && strchr(":/?#[]@!$&'()*+,;=", *s))) d.add(*s++); // see RFC 3986 2.2 |
| 380 | else cvecprintf(d, "%%%02X", *s++); |
| 381 | } |
| 382 | d.add('\0'); |
| 383 | return newstring(d.getbuf()); |
| 384 | } |
| 385 | |
| 386 | // parse URLs: scheme:[//[user:password@]domain[:port]][/]path[?query][#fragment] |
| 387 |
no test coverage detected