Кодирование и декодирование HTML-сущностей используя JavaScript

Этот фрагмент кода работает как заклинание в обоих направлениях, кодировании и декодировании. На вход идет строка и возвращает обработанную строку.

В нем не предусмотрено слишком много настроек, но работает отлично (по крайней мере, чтобы иметь всего пару строк). Обратите внимание, что метод кодирования преобразует каждый отдельный символ в его HTML-символ.

Если вы хотите заменить только те странные символы, которые нарушают ваш HTML (<,>,/, и т. д.), не используйте этот метод.


(function(window){
	window.htmlentities = {
		/**
		 * Converts a string to its html characters completely.
		 *
		 * @param {String} str String with unescaped HTML characters
		 **/
		encode : function(str) {
			var buf = [];
			
			for (var i=str.length-1;i>=0;i--) {
				buf.unshift(['&#', str[i].charCodeAt(), ';'].join(''));
			}
			
			return buf.join('');
		},
		/**
		 * Converts an html characterSet into its original character.
		 *
		 * @param {String} str htmlSet entities
		 **/
		decode : function(str) {
			return str.replace(/&#(d+);/g, function(match, dec) {
				return String.fromCharCode(dec);
			});
		}
	};
})(window);

Код создает глобальную переменную (в window) с именем htmlentities. Этот объект содержит 2 метода encode и decode.

Чтобы преобразовать обычную строку в символы HTML, используйте метод encode:


htmlentities.encode("Ночью я чинила глобус, Словно слесарь, как хирург. Я поймала аэробус И вернула в Петербург.");

// Output
"&#1053;&#1086;&#1095;&#1100;&#1102;&#32;&#1103;&#32;&#1095;&#1080;&#1085;&#1080;&#1083;&#1072;&#32;&#1075;&#1083;&#1086;&#1073;&#1091;&#1089;&#44;&#32;&#1057;&#1083;&#1086;&#1074;&#1085;&#1086;&#32;&#1089;&#1083;&#1077;&#1089;&#1072;&#1088;&#1100;&#44;&#32;&#1082;&#1072;&#1082;&#32;&#1093;&#1080;&#1088;&#1091;&#1088;&#1075;&#46;&#32;&#1071;&#32;&#1087;&#1086;&#1081;&#1084;&#1072;&#1083;&#1072;&#32;&#1072;&#1101;&#1088;&#1086;&#1073;&#1091;&#1089;&#32;&#1048;&#32;&#1074;&#1077;&#1088;&#1085;&#1091;&#1083;&#1072;&#32;&#1074;&#32;&#1055;&#1077;&#1090;&#1077;&#1088;&#1073;&#1091;&#1088;&#1075;&#46;"

Чтобы преобразовать закодированную HTML-строку в читаемые символы, используйте метод decode:


htmlentities.decode("&#1053;&#1086;&#1095;&#1100;&#1102; &#1103; &#1095;&#1080;&#1085;&#1080;&#1083;&#1072; &#1075;&#1083;&#1086;&#1073;&#1091;&#1089;, &#1057;&#1083;&#1086;&#1074;&#1085;&#1086; &#1089;&#1083;&#1077;&#1089;&#1072;&#1088;&#1100;, &#1082;&#1072;&#1082; &#1093;&#1080;&#1088;&#1091;&#1088;&#1075;. &#1071; &#1087;&#1086;&#1081;&#1084;&#1072;&#1083;&#1072; &#1072;&#1101;&#1088;&#1086;&#1073;&#1091;&#1089; &#1048; &#1074;&#1077;&#1088;&#1085;&#1091;&#1083;&#1072; &#1074; &#1055;&#1077;&#1090;&#1077;&#1088;&#1073;&#1091;&#1088;&#1075;.");

// Output
"Ночью я чинила глобус, Словно слесарь, как хирург. Я поймала аэробус И вернула в Петербург."

Примечание: вы можете свободно копировать каждую функцию и включать ее в свой проект по своему усмотрению.

В PHP есть функция html_entity_decode() аналогичная методу decode.

Оцените статью
Добавить комментарий