Самая простая и удобная

function htmlspecialchars( html){
  var div =  document.createElement('div');
  div.innerText = html;
  return div.innerHTML;
}

но это работа с дом. Медленно.

Другой вариант.

function htmlspecialchars(str) {
 if (typeof(str) == "string") {
  str = str.replace(/&/g, "&"); /* must do & first */
  str = str.replace(/"/g, """);
  str = str.replace(/'/g, "'");
  str = str.replace(/</g, "<");
  str = str.replace(/>/g, ">");
  }
 return str;
 }

далее

Более сложная, по параметрам схожа с php

function htmlspecialchars (string, quote_style, charset, double_encode) {
  var optTemp = 0,i = 0,noquotes = false;
  if (typeof quote_style === 'undefined' || quote_style === null) {
    quote_style = 2;
  }
  string = string+'';
  if (double_encode !== false) { // Put this first to avoid double-encoding
    string = string.replace(/&/g, '&amp;');
  }
  string = string.replace(/</g, '<').replace(/>/g, '>');

  var OPTS = {
    'ENT_NOQUOTES': 0,
    'ENT_HTML_QUOTE_SINGLE': 1,
    'ENT_HTML_QUOTE_DOUBLE': 2,
    'ENT_COMPAT': 2,
    'ENT_QUOTES': 3,
    'ENT_IGNORE': 4
  };
  if ( quote_style === 0 ) {
    noquotes = true;
  }
  if (typeof quote_style !== 'number') { // Allow for a single string or an array of string flags
    quote_style = [].concat(quote_style);
    for (i = 0; i < quote_style.length; i++) {
      // Resolve string input to bitwise e.g. 'ENT_IGNORE' becomes 4
      if (OPTS[quote_style[i]] === 0) {
        noquotes = true;
      }else if (OPTS[quote_style[i]]) {
        optTemp = optTemp | OPTS[quote_style[i]];
      }
    }
    quote_style = optTemp;
  }
  if (quote_style & OPTS.ENT_HTML_QUOTE_SINGLE) {
    string = string.replace(/'/g, '&#039;');
  }
  if (!noquotes) {
    string = string.replace(/"/g, '"');
  }
  return string;
}

или самый простой вариант

html = html.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/'/g, '&#039;').replace(/</g, '&lt;').replace(/>/g, '&gt;');

Заметки подобные этой пишу через быструю форму, которую вы видите поверх статьи. Больше для себя. Чтобы в другой раз ну гуглить готовое решение.

А из первого варианта легко можно сделать аналог strip_tags, достаточно поменять местами  innerHTML и  innerText

function strip_tags( html){
  var div =  document.createElement('div');
  div.innerHTML =  html;
  return div.innerText ;
}

 

Оставлять комментарии могут только зарегистрированные пользователи

Комментарии  

Ibo_Sher
# Ibo_Sher 25.06.2013 22:55
Извините, Leroy, ИМХО статья не закончена ?

А где же "самый простой вариант"

или хотя бы точка в конце предложения (статьи) ?
Leroy
# Leroy 25.06.2013 23:56
эту заметку, пишу для себя. Потому как не первый раз гуглю решение. Если Вам тоже пригодилось буду только рад

п.с. статью завершил
polarus.biz
# polarus.biz 29.07.2019 02:10
Не гуру js, но интересно (чисто технически, так то всё это крохи). Обёртка экономит память или увеличивает скорость за счет того что элемент уже создан?
PS: не конкретно данный пример, а в целом, при множественных вызовах любой функции в проекте - привычка оборачивать, дабы экономить ресурсы.
Код:var htmlspecialchars = (function () {
var div = document.createElement("div");
return function (html) {
div.innerText = html;
return div.innerHTML;
}
})();