diff options
author | Kim Alvefur <zash@zash.se> | 2019-06-10 13:22:22 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2019-06-10 13:22:22 +0200 |
commit | 5eba0ea836d508aeb3087a7d93f6e90cc1f92de8 (patch) | |
tree | 8cd84a76fb673cbfefa00ba1516bd16150f1c780 /util/http.lua | |
parent | 1cc4ec5d808a55d32e3d51f30d8b50fe45268438 (diff) | |
parent | 2bb05d010d9b237a088bd9b4c997451407191d3f (diff) | |
download | prosody-5eba0ea836d508aeb3087a7d93f6e90cc1f92de8.tar.gz prosody-5eba0ea836d508aeb3087a7d93f6e90cc1f92de8.zip |
Merge 0.11->trunk
Diffstat (limited to 'util/http.lua')
-rw-r--r-- | util/http.lua | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/util/http.lua b/util/http.lua index cfb89193..3852f91c 100644 --- a/util/http.lua +++ b/util/http.lua @@ -6,24 +6,26 @@ -- local format, char = string.format, string.char; -local pairs, ipairs, tonumber = pairs, ipairs, tonumber; +local pairs, ipairs = pairs, ipairs; local t_insert, t_concat = table.insert, table.concat; +local url_codes = {}; +for i = 0, 255 do + local c = char(i); + local u = format("%%%02x", i); + url_codes[c] = u; + url_codes[u] = c; + url_codes[u:upper()] = c; +end local function urlencode(s) - return s and (s:gsub("[^a-zA-Z0-9.~_-]", function (c) return format("%%%02x", c:byte()); end)); + return s and (s:gsub("[^a-zA-Z0-9.~_-]", url_codes)); end local function urldecode(s) - return s and (s:gsub("%%(%x%x)", function (c) return char(tonumber(c,16)); end)); + return s and (s:gsub("%%%x%x", url_codes)); end local function _formencodepart(s) - return s and (s:gsub("%W", function (c) - if c ~= " " then - return format("%%%02x", c:byte()); - else - return "+"; - end - end)); + return s and (urlencode(s):gsub("%%20", "+")); end local function formencode(form) |