]> Repositorios git - scryer-prolog.git/commitdiff
Improved version of url_decode
authorAdrián Arroyo Calle <[email protected]>
Mon, 2 Oct 2023 21:49:09 +0000 (23:49 +0200)
committerAdrián Arroyo Calle <[email protected]>
Mon, 2 Oct 2023 21:49:09 +0000 (23:49 +0200)
src/lib/http/http_server.pl

index faa76ce5a769d873791d4800ca6618b8a80880ef..4c22e49752b77f2de809405d4d8dc6b6c165e811 100644 (file)
@@ -300,25 +300,21 @@ http_query(http_request(_, _, Queries), Key, Value) :- member(Key-Value, Queries
 
 parse_queries([Key-Value|Queries]) -->
     string_without("=", Key0),
-    {
-        phrase(url_decode(Key), Key0)
-    },
     "=",
     string_without("&", Value0),
-    {
-        phrase(url_decode(Value), Value0)
-    },
     "&",
-    parse_queries(Queries).
+    parse_queries(Queries),
+    {
+       phrase(url_decode(Key), Key0),
+       phrase(url_decode(Value), Value0)
+    }.
 
 parse_queries([Key-Value]) -->
     string_without("=", Key0),
-    {
-        phrase(url_decode(Key), Key0)
-    },
     "=",
     string_without(" ", Value0),
     {
+       phrase(url_decode(Key), Key0),
         phrase(url_decode(Value), Value0)  
     }.
 
@@ -329,9 +325,13 @@ parse_queries([]) -->
 url_decode([Char|Chars]) -->
     [Char],
     {
-        Char \= '%'
+        Char \= '%',
+       Char \= (+)
     },
     url_decode(Chars).
+url_decode([' '|Chars]) -->
+    "+",
+    url_decode(Chars).
 url_decode([Char|Chars]) -->
     "%",
     [A],