Кодировка
HTML просто заменяет символы &
, "
, '
, <
и >
их эквивалентами сущностей. Порядок имеет значение, если вы сначала не замените символы &
, вы дважды закодируете некоторые объекты:
if (!String.prototype.encodeHTML) {
String.prototype.encodeHTML = function () {
return this.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
};
}
As @Johan B.W. де Врис указал, что это будет иметь проблемы с именами тегов, я хотел бы уточнить, что я сделал предположение, что это используется только для value
И наоборот, если вы хотите декодировать HTML-сущности 1 , убедитесь, что вы декодируете от &
до &
после всего остального, чтобы не дублировать никакие сущности:
if (!String.prototype.decodeHTML) {
String.prototype.decodeHTML = function () {
return this.replace(/'/g, "'")
.replace(/"/g, '"')
.replace(/>/g, '>')
.replace(/</g, '<')
.replace(/&/g, '&');
};
}
1 только основы, не включая ©
до ©
или другие подобные вещи
Что касается библиотек. Underscore.js (или Lodash , если вы предпочитаете) предоставляет метод _.escape
для выполнения этой функции.