vue3-yuanma/packages/shared/src/escapeHtml.ts
2020-02-02 22:08:20 -05:00

46 lines
898 B
TypeScript

const escapeRE = /["'&<>]/
export function escapeHtml(string: unknown) {
const str = '' + string
const match = escapeRE.exec(str)
if (!match) {
return str
}
let html = ''
let escaped: string
let index: number
let lastIndex = 0
for (index = match.index; index < str.length; index++) {
switch (str.charCodeAt(index)) {
case 34: // "
escaped = '&quot;'
break
case 38: // &
escaped = '&amp;'
break
case 39: // '
escaped = '&#39;'
break
case 60: // <
escaped = '&lt;'
break
case 62: // >
escaped = '&gt;'
break
default:
continue
}
if (lastIndex !== index) {
html += str.substring(lastIndex, index)
}
lastIndex = index + 1
html += escaped
}
return lastIndex !== index ? html + str.substring(lastIndex, index) : html
}