Module:DecodeEncode/sandbox explained

require('strict')local p =

local function _getBoolean(boolean_str) -- from: module:String; adapted -- requires an explicit true local boolean_value

if type(boolean_str)

'string' then boolean_str = boolean_str:lower if boolean_str

'true' or boolean_str

'yes' or boolean_str

'1' then boolean_value = true else boolean_value = false end elseif type(boolean_str)

'boolean' then boolean_value = boolean_str else boolean_value = false end return boolean_valueend

function p.decode(frame) local s = frame.args['s'] or local subset_only = _getBoolean(frame.args['subset_only'] or false)

return p._decode(s, subset_only)end

function p._decode(s, subset_only) -- U+2009 THIN SPACE: workaround for bug: HTML entity   is decoded incorrect. Entity   gets decoded properly s = mw.ustring.gsub(s, ' ', ' ') -- U+03B5 ε GREEK SMALL LETTER EPSILON: workaround for bug (phab:T328840): HTML entity ε is decoded incorrect for gsub. Entity ε gets decoded properly s = mw.ustring.gsub(s, 'ε', 'ε')

local ret = mw.text.decode(s, not subset_only)

return retend

function p.encode(frame) local s = frame.args['s'] or local charset = frame.args['charset']

return p._encode(s, charset)end

function p._encode(s, charset) -- example: charset = '_&©−°\\\"\'\=' -- do escape with backslash not %; local ret

if charset ~= (nil or ) then ret = mw.text.encode(s, charset) else -- use default: chartset = '<>&"\' ' (outer quotes = lua required; space = NBSP) ret = mw.text.encode(s) end return retend

return p