--- /dev/null
+'use strict'
+
+/* eslint-env browser */
+
+var el
+
+var semicolon = 59 // ';'
+
+module.exports = decodeEntity
+
+function decodeEntity(characters) {
+ var entity = '&' + characters + ';'
+ var char
+
+ el = el || document.createElement('i')
+ el.innerHTML = entity
+ char = el.textContent
+
+ // Some entities do not require the closing semicolon (`¬` - for instance),
+ // which leads to situations where parsing the assumed entity of ¬it; will
+ // result in the string `¬it;`. When we encounter a trailing semicolon after
+ // parsing and the entity to decode was not a semicolon (`;`), we can
+ // assume that the matching was incomplete
+ if (char.charCodeAt(char.length - 1) === semicolon && characters !== 'semi') {
+ return false
+ }
+
+ // If the decoded string is equal to the input, the entity was not valid
+ return char === entity ? false : char
+}