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.
78 lines
1.3 KiB
78 lines
1.3 KiB
/*! |
|
* escape-html |
|
* Copyright(c) 2012-2013 TJ Holowaychuk |
|
* Copyright(c) 2015 Andreas Lubbe |
|
* Copyright(c) 2015 Tiancheng "Timothy" Gu |
|
* MIT Licensed |
|
*/ |
|
|
|
'use strict'; |
|
|
|
/** |
|
* Module variables. |
|
* @private |
|
*/ |
|
|
|
var matchHtmlRegExp = /["'&<>]/; |
|
|
|
/** |
|
* Module exports. |
|
* @public |
|
*/ |
|
|
|
module.exports = escapeHtml; |
|
|
|
/** |
|
* Escape special characters in the given string of html. |
|
* |
|
* @param {string} string The string to escape for inserting into HTML |
|
* @return {string} |
|
* @public |
|
*/ |
|
|
|
function escapeHtml(string) { |
|
var str = '' + string; |
|
var match = matchHtmlRegExp.exec(str); |
|
|
|
if (!match) { |
|
return str; |
|
} |
|
|
|
var escape; |
|
var html = ''; |
|
var index = 0; |
|
var lastIndex = 0; |
|
|
|
for (index = match.index; index < str.length; index++) { |
|
switch (str.charCodeAt(index)) { |
|
case 34: // " |
|
escape = '"'; |
|
break; |
|
case 38: // & |
|
escape = '&'; |
|
break; |
|
case 39: // ' |
|
escape = '''; |
|
break; |
|
case 60: // < |
|
escape = '<'; |
|
break; |
|
case 62: // > |
|
escape = '>'; |
|
break; |
|
default: |
|
continue; |
|
} |
|
|
|
if (lastIndex !== index) { |
|
html += str.substring(lastIndex, index); |
|
} |
|
|
|
lastIndex = index + 1; |
|
html += escape; |
|
} |
|
|
|
return lastIndex !== index |
|
? html + str.substring(lastIndex, index) |
|
: html; |
|
}
|
|
|