forked from miketang84/lglib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
http.lua
61 lines (53 loc) · 1.75 KB
/
http.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
local string = string
module(..., package.seeall)
------------------------------------------------------------------------
-- 简单的HTML转义
-- @param
-- @return
------------------------------------------------------------------------
function escapeHTML(s)
checkType(s, 'string')
local esced, i = s:gsub('&', '&'):gsub('<', '<'):gsub('>', '>')
return esced
end
------------------------------------------------------------------------
-- 简单的URL解码,能处理带+号的情况(替换为空白符)
-- @param
-- @return
------------------------------------------------------------------------
-- Simplistic URL decoding that can handle + space encoding too.
function decodeURL(url)
checkType(url, 'string')
return url:gsub("%+", ' '):gsub('%%(%x%x)', function (s)
return string.char(tonumber(s, 16))
end)
end
------------------------------------------------------------------------
-- 简单的URL编码
-- @param
-- @return
------------------------------------------------------------------------
function encodeURL(url)
return url:gsub("\n","\r\n"):gsub("([^%w%-%.])",
function (c) return ("%%%02X"):format(string.byte(c))
end)
end
------------------------------------------------------------------------
-- 解析URL带的参数
-- @param
-- @return
------------------------------------------------------------------------
function parseURL(url, sep)
local result = {}
sep = sep or '&'
url = ('%s%s'):format(url, sep)
for piece in url:gmatch(("(.-)%s"):format(sep)) do
local k,v = piece:match("%s*(.-)%s*=(.*)")
if k then
result[decodeURL(k)] = decodeURL(v)
else
result[#result + 1] = decodeURL(piece)
end
end
return result
end