Lua-encodeURI(luvit)

问题描述 投票:6回答:3

我想在我的[[Lua(Luvit)项目中,在JavaScript中使用decodeURIdecodeURIComponent

JavaScript:

decodeURI('%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82') // result: привет

Luvit:

require('querystring').urldecode('%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82') -- result: '%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82'

lua urldecode encodeuricomponent decodeuricomponent
3个回答
11
投票
如果您了解URI percent-encoded format,那么在Lua中做这件事很简单。每个%XX子字符串代表使用%前缀和十六进制八位字节编码的UTF-8数据。

local decodeURI do local char, gsub, tonumber = string.char, string.gsub, tonumber local function _(hex) return char(tonumber(hex, 16)) end function decodeURI(s) s = gsub(s, '%%(%x%x)', _) return s end end print(decodeURI('%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82'))


3
投票
这是另一种选择。如果必须解码许多字符串,此代码将为您节省大量函数调用。

local hex={} for i=0,255 do hex[string.format("%0x",i)]=string.char(i) hex[string.format("%0X",i)]=string.char(i) end local function decodeURI(s) return (s:gsub('%%(%x%x)',hex)) end print(decodeURI('%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82'))


0
投票
URI用' '代表'+'其他特殊字符用百分比表示,后跟2位十六进制字符代码'%0A'(例如'\n'

local function decodeCharacter(code) -- get the number for the hex code -- then get the character for that number return string.char(tonumber(code, 16)) end function decodeURI(s) -- first replace '+' with ' ' -- then, on the resulting string, decode % encoding local str = s:gsub("+", " ") :gsub('%%(%x%x)', decodeCharacter) return str -- assignment to str removes the second return value of gsub end print(decodeURI('he%79+there%21')) -- prints "hey there!"

© www.soinside.com 2019 - 2024. All rights reserved.