48 lines
822 B
JavaScript
48 lines
822 B
JavaScript
const escapeHtml = string => {
|
|
const str = '' + string
|
|
const matchHtmlRegExp = /["'&<>]/
|
|
const match = matchHtmlRegExp.exec(str)
|
|
|
|
if (!match) {
|
|
return str
|
|
}
|
|
|
|
let escape
|
|
let html = ''
|
|
let index = 0
|
|
let 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
|
|
}
|
|
|
|
module.exports = { escapeHtml }
|