在Lua中从URL解析参数

3

我有一个URL,想从中解析出参数,例如:

function unescape (s)
  s = string.gsub(s, "+", " ")
  s = string.gsub(s, "%%(%x%x)", function (h)
        return string.char(tonumber(h, 16))
      end)
  return s
end

function parseurl (s,param)
for k, v in string.gmatch( s, "([^&=?]+)=([^&=?]+)" ) do
    --t[k] = v
    if k == param then
        --print (k.." "..v)
        return unescape(v)
    end
end

s = "http://www.page.com/link.php uname=Hans+Testmann&uemail=myemail%40gmail.com&utext=Now+this+is+working+great.%0D%0A++&mdt=1#&mydays:themeupload"s

然后我会打电话并获得类似于之后的结果 ->
parseurl (s, "uname")      --> "Hans Testmann"
parseurl (s, "uemail")     --> "myemail@gmail.com"
parseurl (s, "utext")      --> "Now this is working great"

我已经修复了很多问题,似乎现在可以正常工作了,但您能否看一下有哪些改进的可能性呢?


1
也许可以尝试 http://codereview.stackexchange.com/。 - lhf
第一个案例“uname”无法工作。 您需要删除URL,以使gmatch工作。 在for循环之前在parseurl()中添加此行:s = s:match('%s+(.+)') - tonypdmtr
1个回答

4
我会将所有参数返回到一个表格中,使用方式如下:
function urldecode(s)
  s = s:gsub('+', ' ')
       :gsub('%%(%x%x)', function(h)
                           return string.char(tonumber(h, 16))
                         end)
  return s
end

function parseurl(s)
  s = s:match('%s+(.+)')
  local ans = {}
  for k,v in s:gmatch('([^&=?]-)=([^&=?]+)' ) do
    ans[ k ] = urldecode(v)
  end
  return ans
end

t = parseurl(s)
print(t.uname ) --> 'Hans Testmann'
print(t.uemail) --> 'myemail@gmail.com'
print(t.utext ) --> 'Now this is working great'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接