diff options
author | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-11-19 04:31:24 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-11-19 04:31:24 +0100 |
commit | 15380244133d7b6f4f3ca84032e147ed460e5c22 (patch) | |
tree | 7a8128d5d46122aa4925f9c2f192bdd468d8fd31 /sys/src | |
parent | 79172e71e6be93d7902f9dd58ae5beb527cf52a6 (diff) |
webfs: leave ; and / in url-query alone, add space + subsitution
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/cmd/webfs/url.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/src/cmd/webfs/url.c b/sys/src/cmd/webfs/url.c index 0e00b7d2b..c6c5695f0 100644 --- a/sys/src/cmd/webfs/url.c +++ b/sys/src/cmd/webfs/url.c @@ -671,7 +671,7 @@ parse_query(SplitUrl *su, Url *u) if(su->query.s == nil) return 0; s = estredup(su->query.s, su->query.e); - u->query = unescapeurl(s, "&="); + u->query = unescapeurl(s, "&;=/"); free(s); return 0; } @@ -713,7 +713,7 @@ postparse_http(Url *u) } p = escapeurl(u->path, "/"); if(u->query){ - q = escapeurl(u->query, "&="); + q = escapeurl(u->query, "&;=/"); u->http.page_spec = emalloc(strlen(p)+1+strlen(q)+1); strcpy(u->http.page_spec, p); strcat(u->http.page_spec, "?"); @@ -929,7 +929,7 @@ seturlquery(Url *u, char *query) return 0; } free(u->query); - u->query = unescapeurl(query, "&="); + u->query = unescapeurl(query, "&;=/"); return 0; } @@ -998,6 +998,8 @@ escapeurl(char *s, char *special) (*s >= 'A' && *s <= 'Z') || strchr(".-_~", *s) || strchr(special, *s)) *u++ = *s; + else if(s[0] == ' ') + *u++ = '+'; else { *u++ = '%'; *u++ = hex[(*s>>4)&0xF]; @@ -1022,7 +1024,8 @@ unescapeurl(char *s, char *special) x = *r; else r += 2; - } + } else if(x=='+') + x = ' '; *w++ = x; } *w = '\0'; |