-- 扩展string的一些功能
function string.htmlspecialchars(input)
for k, v in pairs(string._htmlspecialchars_set) do
input = string.gsub(input, k, v)
end
return input
end
string._htmlspecialchars_set = {}
string._htmlspecialchars_set["&"] = "&"
string._htmlspecialchars_set["\""] = """
string._htmlspecialchars_set["'"] = "'"
string._htmlspecialchars_set["<"] = "<"
string._htmlspecialchars_set[">"] = ">"
function string.htmlspecialcharsDecode(input)
for k, v in pairs(string._htmlspecialchars_set) do
input = string.gsub(input, v, k)
end
return input
end
function string.nl2br(input)
return string.gsub(input, "\n", "
")
end
function string.text2html(input)
input = string.gsub(input, "\t", " ")
input = string.htmlspecialchars(input)
input = string.gsub(input, " ", " ")
input = string.nl2br(input)
return input
end
function string.split(str, delimiter)
str = tostring(str)
delimiter = tostring(delimiter)
if (delimiter=='') then return false end
local pos,arr = 0, {}
-- for each divider found
for st,sp in function() return string.find(str, delimiter, pos, true) end do
table.insert(arr, string.sub(str, pos, st - 1))
pos = sp + 1
end
table.insert(arr, string.sub(str, pos))
return arr
end
function string.ltrim(str)
return string.gsub(str, "^[ \t\n\r]+", "")
end
function string.rtrim(str)
return string.gsub(str, "[ \t\n\r]+$", "")
end
function string.trim(str)
str = string.gsub(str, "^[ \t\n\r]+", "")
return string.gsub(str, "[ \t\n\r]+$", "")
end
function string.ucfirst(str)
return string.upper(string.sub(str, 1, 1)) .. string.sub(str, 2)
end
local function urlencodeChar(char)
return "%" .. string.format("%02X", string.byte(char))
end
function string.urlencode(str)
-- convert line endings
str = string.gsub(tostring(str), "\n", "\r\n")
-- escape all characters but alphanumeric, '.' and '-'
str = string.gsub(str, "([^%w%.%- ])", urlencodeChar)
-- convert spaces to "+" symbols
return string.gsub(str, " ", "+")
end
function string.urldecode(str)
str = string.gsub (str, "+", " ")
str = string.gsub (str, "%%(%x%x)", function(h) return string.char(tonum(h,16)) end)
str = string.gsub (str, "\r\n", "\n")
return str
end
function string.utf8len(str)
local len = #str
local left = len
local cnt = 0
local arr = {0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc}
while left ~= 0 do
local tmp = string.byte(str, -left)
local i = #arr
while arr[i] do
if tmp >= arr[i] then
left = left - i
break
end
i = i - 1
end
cnt = cnt + 1
end
return cnt
end
function string.formatNumberThousands(num)
local formatted = tostring(tonum(num))
local k
while true do
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
if k == 0 then break end
end
return formatted
end
-- 把文件名分割成目录名和文件名
-- 返回pathName , baseName , ext
function string.splitFilename(filename)
local reverseFile = string.reverse(filename);
local pos = string.find(reverseFile , "[/\\]");
local dotPos = string.find(reverseFile , "%.");
return string.sub(filename , 1 , #filename - pos) , string.sub(filename , #filename - pos + 2) , string.sub(filename , #filename - dotPos + 2);
end
-- 是否是某字符串结束
function string.endsWith(filename , ends)
return string.sub(filename , - #ends) == ends;
end
-- 是否是以字符串开头
function string.startsWith(filename , starts)
return string.sub(filename , 1 , #starts) == starts;
end
-- 转换到lua源码格式的字符串
function string.toLuaString(str)
local buffer = {"\""};
for i = 1 , string.len(str) do
table.insert(buffer , [[\]] .. string.byte(str , i));
end
table.insert(buffer , "\"");
return table.concat(buffer);
end;