我想在我的[[Lua(Luvit)项目中,在JavaScript中使用decodeURI
或decodeURIComponent
。
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'
%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'))
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'))
' '
代表'+'
其他特殊字符用百分比表示,后跟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!"