htmlencode.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. /**
  2. * [js-htmlencode]{@link https://github.com/emn178/js-htmlencode}
  3. *
  4. * @version 0.3.01b
  5. * @author Chen, Yi-Cyuan [emn178@gmail.com]
  6. * @author 0.3.01b 5 Mode [my25mb@aol.com]
  7. * @copyright Chen, Yi-Cyuan 2014-2017
  8. * @license MIT
  9. */
  10. /*jslint bitwise: true */
  11. (function () {
  12. 'use strict';
  13. var root = typeof window === 'object' ? window : {};
  14. var NODE_JS = !root.JS_HTMLENCODE_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
  15. if (NODE_JS) {
  16. root = global;
  17. }
  18. var COMMON_JS = !root.JS_HTMLENCODE_NO_COMMON_JS && typeof module === 'object' && module.exports;
  19. var AMD = typeof define === 'function' && define.amd;
  20. var HTML_ENTITIES = {
  21. ' ' : '\u00A0',
  22. '¡' : '\u00A1',
  23. '¢' : '\u00A2',
  24. '£' : '\u00A3',
  25. '¤' : '\u00A4',
  26. '¥' : '\u00A5',
  27. '¦' : '\u00A6',
  28. '§' : '\u00A7',
  29. '¨' : '\u00A8',
  30. '©' : '\u00A9',
  31. 'ª' : '\u00AA',
  32. '«' : '\u00AB',
  33. '¬' : '\u00AC',
  34. '­' : '\u00AD',
  35. '®' : '\u00AE',
  36. '¯' : '\u00AF',
  37. '°' : '\u00B0',
  38. '±' : '\u00B1',
  39. '²' : '\u00B2',
  40. '³' : '\u00B3',
  41. '´' : '\u00B4',
  42. 'µ' : '\u00B5',
  43. '¶' : '\u00B6',
  44. '·' : '\u00B7',
  45. '¸' : '\u00B8',
  46. '¹' : '\u00B9',
  47. 'º' : '\u00BA',
  48. '»' : '\u00BB',
  49. '¼' : '\u00BC',
  50. '½' : '\u00BD',
  51. '¾' : '\u00BE',
  52. '¿' : '\u00BF',
  53. 'À' : '\u00C0',
  54. 'Á' : '\u00C1',
  55. 'Â' : '\u00C2',
  56. 'Ã' : '\u00C3',
  57. 'Ä' : '\u00C4',
  58. 'Å' : '\u00C5',
  59. 'Æ' : '\u00C6',
  60. 'Ç' : '\u00C7',
  61. 'È' : '\u00C8',
  62. 'É' : '\u00C9',
  63. 'Ê' : '\u00CA',
  64. 'Ë' : '\u00CB',
  65. 'Ì' : '\u00CC',
  66. 'Í' : '\u00CD',
  67. 'Î' : '\u00CE',
  68. 'Ï' : '\u00CF',
  69. 'Ð' : '\u00D0',
  70. 'Ñ' : '\u00D1',
  71. 'Ò' : '\u00D2',
  72. 'Ó' : '\u00D3',
  73. 'Ô' : '\u00D4',
  74. 'Õ' : '\u00D5',
  75. 'Ö' : '\u00D6',
  76. '×' : '\u00D7',
  77. 'Ø' : '\u00D8',
  78. 'Ù' : '\u00D9',
  79. 'Ú' : '\u00DA',
  80. 'Û' : '\u00DB',
  81. 'Ü' : '\u00DC',
  82. 'Ý' : '\u00DD',
  83. 'Þ' : '\u00DE',
  84. 'ß' : '\u00DF',
  85. 'à' : '\u00E0',
  86. 'á' : '\u00E1',
  87. 'â' : '\u00E2',
  88. 'ã' : '\u00E3',
  89. 'ä' : '\u00E4',
  90. 'å' : '\u00E5',
  91. 'æ' : '\u00E6',
  92. 'ç' : '\u00E7',
  93. 'è' : '\u00E8',
  94. 'é' : '\u00E9',
  95. 'ê' : '\u00EA',
  96. 'ë' : '\u00EB',
  97. 'ì' : '\u00EC',
  98. 'í' : '\u00ED',
  99. 'î' : '\u00EE',
  100. 'ï' : '\u00EF',
  101. 'ð' : '\u00F0',
  102. 'ñ' : '\u00F1',
  103. 'ò' : '\u00F2',
  104. 'ó' : '\u00F3',
  105. 'ô' : '\u00F4',
  106. 'õ' : '\u00F5',
  107. 'ö' : '\u00F6',
  108. '÷' : '\u00F7',
  109. 'ø' : '\u00F8',
  110. 'ù' : '\u00F9',
  111. 'ú' : '\u00FA',
  112. 'û' : '\u00FB',
  113. 'ü' : '\u00FC',
  114. 'ý' : '\u00FD',
  115. 'þ' : '\u00FE',
  116. 'ÿ' : '\u00FF',
  117. '"' : '\u0022',
  118. '&' : '\u0026',
  119. '<' : '\u003C',
  120. '>' : '\u003E',
  121. ''' : '\u0027',
  122. 'Œ' : '\u0152',
  123. 'œ' : '\u0153',
  124. 'Š' : '\u0160',
  125. 'š' : '\u0161',
  126. 'Ÿ' : '\u0178',
  127. 'ˆ' : '\u02C6',
  128. '˜' : '\u02DC',
  129. ' ' : '\u2002',
  130. ' ' : '\u2003',
  131. ' ' : '\u2009',
  132. '‌' : '\u200C',
  133. '‍' : '\u200D',
  134. '‎' : '\u200E',
  135. '‏' : '\u200F',
  136. '–' : '\u2013',
  137. '—' : '\u2014',
  138. '‘' : '\u2018',
  139. '’' : '\u2019',
  140. '‚' : '\u201A',
  141. '“' : '\u201C',
  142. '”' : '\u201D',
  143. '„' : '\u201E',
  144. '†' : '\u2020',
  145. '‡' : '\u2021',
  146. '‰' : '\u2030',
  147. '‹' : '\u2039',
  148. '›' : '\u203A',
  149. '€' : '\u20AC',
  150. 'ƒ' : '\u0192',
  151. 'Α' : '\u0391',
  152. 'Β' : '\u0392',
  153. 'Γ' : '\u0393',
  154. 'Δ' : '\u0394',
  155. 'Ε' : '\u0395',
  156. 'Ζ' : '\u0396',
  157. 'Η' : '\u0397',
  158. 'Θ' : '\u0398',
  159. 'Ι' : '\u0399',
  160. 'Κ' : '\u039A',
  161. 'Λ' : '\u039B',
  162. 'Μ' : '\u039C',
  163. 'Ν' : '\u039D',
  164. 'Ξ' : '\u039E',
  165. 'Ο' : '\u039F',
  166. 'Π' : '\u03A0',
  167. 'Ρ' : '\u03A1',
  168. 'Σ' : '\u03A3',
  169. 'Τ' : '\u03A4',
  170. 'Υ' : '\u03A5',
  171. 'Φ' : '\u03A6',
  172. 'Χ' : '\u03A7',
  173. 'Ψ' : '\u03A8',
  174. 'Ω' : '\u03A9',
  175. 'α' : '\u03B1',
  176. 'β' : '\u03B2',
  177. 'γ' : '\u03B3',
  178. 'δ' : '\u03B4',
  179. 'ε' : '\u03B5',
  180. 'ζ' : '\u03B6',
  181. 'η' : '\u03B7',
  182. 'θ' : '\u03B8',
  183. 'ι' : '\u03B9',
  184. 'κ' : '\u03BA',
  185. 'λ' : '\u03BB',
  186. 'μ' : '\u03BC',
  187. 'ν' : '\u03BD',
  188. 'ξ' : '\u03BE',
  189. 'ο' : '\u03BF',
  190. 'π' : '\u03C0',
  191. 'ρ' : '\u03C1',
  192. 'ς' : '\u03C2',
  193. 'σ' : '\u03C3',
  194. 'τ' : '\u03C4',
  195. 'υ' : '\u03C5',
  196. 'φ' : '\u03C6',
  197. 'χ' : '\u03C7',
  198. 'ψ' : '\u03C8',
  199. 'ω' : '\u03C9',
  200. 'ϑ' : '\u03D1',
  201. 'ϒ' : '\u03D2',
  202. 'ϖ' : '\u03D6',
  203. '•' : '\u2022',
  204. '…' : '\u2026',
  205. '′' : '\u2032',
  206. '″' : '\u2033',
  207. '‾' : '\u203E',
  208. '⁄' : '\u2044',
  209. '℘' : '\u2118',
  210. 'ℑ' : '\u2111',
  211. 'ℜ' : '\u211C',
  212. '™' : '\u2122',
  213. 'ℵ' : '\u2135',
  214. '←' : '\u2190',
  215. '↑' : '\u2191',
  216. '→' : '\u2192',
  217. '↓' : '\u2193',
  218. '↔' : '\u2194',
  219. '↵' : '\u21B5',
  220. '⇐' : '\u21D0',
  221. '⇑' : '\u21D1',
  222. '⇒' : '\u21D2',
  223. '⇓' : '\u21D3',
  224. '⇔' : '\u21D4',
  225. '∀' : '\u2200',
  226. '∂' : '\u2202',
  227. '∃' : '\u2203',
  228. '∅' : '\u2205',
  229. '∇' : '\u2207',
  230. '∈' : '\u2208',
  231. '∉' : '\u2209',
  232. '∋' : '\u220B',
  233. '∏' : '\u220F',
  234. '∑' : '\u2211',
  235. '−' : '\u2212',
  236. '∗' : '\u2217',
  237. '√' : '\u221A',
  238. '∝' : '\u221D',
  239. '∞' : '\u221E',
  240. '∠' : '\u2220',
  241. '∧' : '\u2227',
  242. '∨' : '\u2228',
  243. '∩' : '\u2229',
  244. '∪' : '\u222A',
  245. '∫' : '\u222B',
  246. '∴' : '\u2234',
  247. '∼' : '\u223C',
  248. '≅' : '\u2245',
  249. '≈' : '\u2248',
  250. '≠' : '\u2260',
  251. '≡' : '\u2261',
  252. '≤' : '\u2264',
  253. '≥' : '\u2265',
  254. '⊂' : '\u2282',
  255. '⊃' : '\u2283',
  256. '⊄' : '\u2284',
  257. '⊆' : '\u2286',
  258. '⊇' : '\u2287',
  259. '⊕' : '\u2295',
  260. '⊗' : '\u2297',
  261. '⊥' : '\u22A5',
  262. '⋅' : '\u22C5',
  263. '⌈' : '\u2308',
  264. '⌉' : '\u2309',
  265. '⌊' : '\u230A',
  266. '⌋' : '\u230B',
  267. '⟨' : '\u2329',
  268. '⟩' : '\u232A',
  269. '◊' : '\u25CA',
  270. '♠' : '\u2660',
  271. '♣' : '\u2663',
  272. '♥' : '\u2665',
  273. '♦' : '\u2666'
  274. };
  275. var decodeEntity = function (code) {
  276. // name type
  277. if (code.charAt(1) !== '#') {
  278. return HTML_ENTITIES[code] || code;
  279. }
  280. var n, c = code.charAt(2);
  281. // hex number
  282. if (c === 'x' || c === 'X') {
  283. c = code.substring(3, code.length - 1);
  284. n = parseInt(c, 16);
  285. } else {
  286. c = code.substring(2, code.length - 1);
  287. n = parseInt(c);
  288. }
  289. return isNaN(n) ? code : String.fromCharCode(n);
  290. };
  291. var htmlEncode = function (str) {
  292. return str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''')
  293. .replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\|\|\|999/g, '\n');
  294. };
  295. var htmlDecode = function (str) {
  296. return str.replace(/&#?\w+;/g, decodeEntity);
  297. };
  298. var exports = htmlEncode;
  299. htmlEncode.htmlEncode = htmlEncode;
  300. htmlEncode.htmlDecode = htmlDecode;
  301. if (COMMON_JS) {
  302. module.exports = exports;
  303. } else {
  304. root.htmlEncode = htmlEncode;
  305. root.htmlDecode = htmlDecode;
  306. if (AMD) {
  307. define(function() {
  308. return exports;
  309. });
  310. }
  311. }
  312. })();