-- 扩展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;