123456789101112131415161718192021222324252627282930313233343536373839 |
- local url = {}
- local function decode_func(c)
- return string.char(tonumber(c, 16))
- end
- local function decode(str)
- local str = str:gsub('+', ' ')
- return str:gsub("%%(..)", decode_func)
- end
- function url.parse(u)
- local path,query = u:match "([^?]*)%??(.*)"
- if path then
- path = decode(path)
- end
- return path, query
- end
- function url.parse_query(q)
- local r = {}
- for k,v in q:gmatch "(.-)=([^&]*)&?" do
- local dk, dv = decode(k), decode(v)
- local oldv = r[dk]
- if oldv then
- if type(oldv) ~= "table" then
- r[dk] = {oldv, dv}
- else
- oldv[#oldv+1] = dv
- end
- else
- r[dk] = dv
- end
- end
- return r
- end
- return url
|