html: fix url_escape

When used in URLs to be passed to a browser, strings MUST NOT contain +.
We must escape + too, otherwise browsers converts it to a space or %20,
which does not represent the original value anymore.

Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
Simon Rozman 2024-10-09 17:09:50 +02:00
parent 6379065f15
commit bfda0e962b

View File

@ -312,7 +312,7 @@ namespace stdex
stdex_assert(src || !num_chars); stdex_assert(src || !num_chars);
for (size_t i = 0; i < num_chars && src[i]; ++i) { for (size_t i = 0; i < num_chars && src[i]; ++i) {
switch (src[i]) { switch (src[i]) {
case ' ': dst += "+"; break; case ' ': dst += "%20"; break;
case '<': dst += "%3C"; break; case '<': dst += "%3C"; break;
case '>': dst += "%3E"; break; case '>': dst += "%3E"; break;
case '#': dst += "%23"; break; case '#': dst += "%23"; break;
@ -327,6 +327,7 @@ namespace stdex
case ']': dst += "%5D"; break; case ']': dst += "%5D"; break;
case '`': dst += "%60"; break; case '`': dst += "%60"; break;
case ';': dst += "%3B"; break; case ';': dst += "%3B"; break;
case '+': dst += "%2B"; break;
case '/': dst += "%2F"; break; case '/': dst += "%2F"; break;
case '?': dst += "%3F"; break; case '?': dst += "%3F"; break;
case ':': dst += "%3A"; break; case ':': dst += "%3A"; break;