В передней части развития часто необходимо избежать левых и правых угловых кронштейнов HTML в формы сущности. Мы не можем отображать <,> и и т. Д. Прямо на веб -странице, которую мы наконец видим. Его нужно избежать, прежде чем его можно будет отображать на веб -странице.
Последовательность побега также называется символом. Основная причина определения сбежавших строк - это
Такие символы, как «<» и «>», использовались для представления тега HTML, поэтому их нельзя использовать непосредственно в качестве символов в тексте. Но иногда необходимость заключается в использовании этих символов на HTML -страницах, поэтому ему необходимо определить его строку побега.
Некоторые символы не определены в наборе символов ASCII (например, символ авторского права "©"). Следовательно, необходимо использовать экологичные символы (символ побега, соответствующий «©», является «©»), чтобы представлять их.
Вот две функции Escape и Unessape, которые соответственно реализуют побег HTML в качестве сущностей и вращения.
Метод 1. Таблица сопоставления + обычная замена
Кода -копия выглядит следующим образом:
var keys = object.keys || функция (obj) {
obj = объект (obj)
var arr = []
для (var a in obj) arr.push (a)
возврат
}
var invert = function (obj) {
obj = объект (obj)
var result = {}
для (var a in obj) результат [obj [a]] = a
вернуть результат
}
var EntityMap = {
побег: {
'&': '&',
'<': '<',
'>': '>',
'' ':' '',
"" ": '' '
}
}
EntityMap.unescape = invert (entitymap.escape)
var EntityReg = {
Escape: regexp ('[' + keys (entitymap.escape) .join ('') + ']', 'g'),
Unessape: regexp ('(' + keys (entitymap.unescape) .join ('|') + ')', 'g')
}
// Escape html в сущность
функция Escape (html) {
if (typeof html! == 'string') return '' ''
return html.replace (entityreg.escape, function (match) {
return entitymap.escape [Match]
})
}
// повернуть сущность обратно в HTML
функция Unescape (str) {
if (typeof Str! == 'String') return ''
return str.replace (entityreg.unescape, function (match) {
return entitymap.unescape [Match]
})
}
Метод 2: Использование API браузера DOM
Кода -копия выглядит следующим образом:
// Escape html в сущность
функция Escape (html) {
var elem = document.createElement ('div')
var txt = document.createtextnode (html)
elem.appendchild (txt)
вернуть elem.innerhtml;
}
// повернуть сущность обратно в HTML
функция Unescape (str) {
var elem = document.createElement ('div')
elem.innerhtml = str
вернуть elem.innertext || elem.textContent
}
Существует недостаток, который можно избежать только «<> &», и для одиночных кавычек двойные кавычки не сбежаются. Другие, не являющиеся ASCII, тоже нельзя избежать. Обратите внимание при выборе.
Сравнивать:
Метод 1 Объем кода велик, но гибкость и целостность лучше, чем метод 2. Основная таблица отображения может быть добавлена или снижена в соответствии с требованиями, и может быть запущена в любой среде JS.
Метод 2 - это метод взлома, с гораздо меньшим количеством кода, и вы можете избежать и перенаправить его, используя внутренний API браузера (оба основных браузера поддерживают его). Это не завершено, и очевидно, что его можно использовать только в среде браузера (например, не работает в node.js).