Lua query string encoder and parser
Lua
local function enc(s) return (tostring(s):gsub('[^%w%-%._~]', function(c) return ('%%%02X'):format(c:byte()) end)) end
local function dec(s) return (s:gsub('%+', ' '):gsub('%%(%x%x)', function(h) return string.char(tonumber(h, 16)) end)) end
local function parse(qs)
local out = {}
for pair in qs:gmatch('[^&]+') do
local k, v = pair:match('^([^=]*)=(.*)$')
if not k then k, v = pair, '' end
out[dec(k)] = dec(v)
end
return out
end
local function build(params)
local parts = {}
for k, v in pairs(params) do parts[#parts + 1] = enc(k) .. '=' .. enc(v) end
return table.concat(parts, '&')
end
return { parse = parse, build = build }