summaryrefslogtreecommitdiff
path: root/qs.lua
diff options
context:
space:
mode:
authorubq323 <ubq323@ubq323.website>2025-02-18 21:17:15 +0000
committerubq323 <ubq323@ubq323.website>2025-02-18 21:17:15 +0000
commit7771a8e80eaa038932ab91ebeebe2c8cf3936b97 (patch)
tree34059f93ee03e29416c179d17597b00332742791 /qs.lua
parentbcc60fda65fd583a331a0a21c4d47092c95329eb (diff)
import qs.lua from 0
Diffstat (limited to 'qs.lua')
-rw-r--r--qs.lua26
1 files changed, 26 insertions, 0 deletions
diff --git a/qs.lua b/qs.lua
new file mode 100644
index 0000000..a63045e
--- /dev/null
+++ b/qs.lua
@@ -0,0 +1,26 @@
+-- querystring and post body parsing
+
+local function urldecode(s)
+ return s:gsub('+',' ')
+ :gsub('%%(%x%x)',function(x)
+ return string.char(tonumber(x,16))
+ end)
+end
+
+local function parse_qs(s)
+ local ix = 1
+ local res = {}
+ while true do
+ local _,next_ix,ek,ev = s:find("([^=]+)=([^&]*)&?",ix)
+ if not ek then break end
+ local k,v = urldecode(ek), urldecode(ev)
+ res[k] = v
+ ix = next_ix + 1
+ end
+ return res
+end
+
+return {
+ urldecode=urldecode,
+ parse_qs=parse_qs
+}