Самая простая и удобная
1 2 3 4 5 | function htmlspecialchars( html){ var div = document.createElement( 'div' ); div.innerText = html; return div.innerHTML; } |
но это работа с дом. Медленно.
Другой вариант.
1 2 3 4 5 6 7 8 9 10 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 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, '&' ); } 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, '&' ).replace(/"/g, '"' ).replace(/ '/g, ' & #039;').replace(/</g, '<').replace(/>/g, '>'); |
Заметки подобные этой пишу через быструю форму, которую вы видите поверх статьи. Больше для себя. Чтобы в другой раз ну гуглить готовое решение.
А из первого варианта легко можно сделать аналог strip_tags, достаточно поменять местами innerHTML и innerText
function strip_tags( html){ var div = document.createElement( 'div' ); div.innerHTML = html; return div.innerText ; } |
Комментарии
А где же "самый простой вариант"
или хотя бы точка в конце предложения (статьи) ?
п.с. статью завершил
PS: не конкретно данный пример, а в целом, при множественных вызовах любой функции в проекте - привычка оборачивать, дабы экономить ресурсы.
Код:
var htmlspecialchars = (function () {
var div = document.createElement("div");
return function (html) {
div.innerText = html;
return div.innerHTML;
}
})();