You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
3.9 KiB

  1. -- 扩展string的一些功能
  2. function string.htmlspecialchars(input)
  3. for k, v in pairs(string._htmlspecialchars_set) do
  4. input = string.gsub(input, k, v)
  5. end
  6. return input
  7. end
  8. string._htmlspecialchars_set = {}
  9. string._htmlspecialchars_set["&"] = "&"
  10. string._htmlspecialchars_set["\""] = """
  11. string._htmlspecialchars_set["'"] = "'"
  12. string._htmlspecialchars_set["<"] = "&lt;"
  13. string._htmlspecialchars_set[">"] = "&gt;"
  14. function string.htmlspecialcharsDecode(input)
  15. for k, v in pairs(string._htmlspecialchars_set) do
  16. input = string.gsub(input, v, k)
  17. end
  18. return input
  19. end
  20. function string.nl2br(input)
  21. return string.gsub(input, "\n", "<br />")
  22. end
  23. function string.text2html(input)
  24. input = string.gsub(input, "\t", " ")
  25. input = string.htmlspecialchars(input)
  26. input = string.gsub(input, " ", "&nbsp;")
  27. input = string.nl2br(input)
  28. return input
  29. end
  30. function string.split(str, delimiter)
  31. str = tostring(str)
  32. delimiter = tostring(delimiter)
  33. if (delimiter=='') then return false end
  34. local pos,arr = 0, {}
  35. -- for each divider found
  36. for st,sp in function() return string.find(str, delimiter, pos, true) end do
  37. table.insert(arr, string.sub(str, pos, st - 1))
  38. pos = sp + 1
  39. end
  40. table.insert(arr, string.sub(str, pos))
  41. return arr
  42. end
  43. function string.ltrim(str)
  44. return string.gsub(str, "^[ \t\n\r]+", "")
  45. end
  46. function string.rtrim(str)
  47. return string.gsub(str, "[ \t\n\r]+$", "")
  48. end
  49. function string.trim(str)
  50. str = string.gsub(str, "^[ \t\n\r]+", "")
  51. return string.gsub(str, "[ \t\n\r]+$", "")
  52. end
  53. function string.ucfirst(str)
  54. return string.upper(string.sub(str, 1, 1)) .. string.sub(str, 2)
  55. end
  56. local function urlencodeChar(char)
  57. return "%" .. string.format("%02X", string.byte(char))
  58. end
  59. function string.urlencode(str)
  60. -- convert line endings
  61. str = string.gsub(tostring(str), "\n", "\r\n")
  62. -- escape all characters but alphanumeric, '.' and '-'
  63. str = string.gsub(str, "([^%w%.%- ])", urlencodeChar)
  64. -- convert spaces to "+" symbols
  65. return string.gsub(str, " ", "+")
  66. end
  67. function string.urldecode(str)
  68. str = string.gsub (str, "+", " ")
  69. str = string.gsub (str, "%%(%x%x)", function(h) return string.char(tonum(h,16)) end)
  70. str = string.gsub (str, "\r\n", "\n")
  71. return str
  72. end
  73. function string.utf8len(str)
  74. local len = #str
  75. local left = len
  76. local cnt = 0
  77. local arr = {0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc}
  78. while left ~= 0 do
  79. local tmp = string.byte(str, -left)
  80. local i = #arr
  81. while arr[i] do
  82. if tmp >= arr[i] then
  83. left = left - i
  84. break
  85. end
  86. i = i - 1
  87. end
  88. cnt = cnt + 1
  89. end
  90. return cnt
  91. end
  92. function string.formatNumberThousands(num)
  93. local formatted = tostring(tonum(num))
  94. local k
  95. while true do
  96. formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
  97. if k == 0 then break end
  98. end
  99. return formatted
  100. end
  101. -- 把文件名分割成目录名和文件名
  102. -- 返回pathName , baseName , ext
  103. function string.splitFilename(filename)
  104. local reverseFile = string.reverse(filename);
  105. local pos = string.find(reverseFile , "[/\\]");
  106. local dotPos = string.find(reverseFile , "%.");
  107. return string.sub(filename , 1 , #filename - pos) , string.sub(filename , #filename - pos + 2) , string.sub(filename , #filename - dotPos + 2);
  108. end
  109. -- 是否是某字符串结束
  110. function string.endsWith(filename , ends)
  111. return string.sub(filename , - #ends) == ends;
  112. end
  113. -- 是否是以字符串开头
  114. function string.startsWith(filename , starts)
  115. return string.sub(filename , 1 , #starts) == starts;
  116. end
  117. -- 转换到lua源码格式的字符串
  118. function string.toLuaString(str)
  119. local buffer = {"\""};
  120. for i = 1 , string.len(str) do
  121. table.insert(buffer , [[\]] .. string.byte(str , i));
  122. end
  123. table.insert(buffer , "\"");
  124. return table.concat(buffer);
  125. end;