Я нашел лучший ответ на этот вопрос раньше и принял опубликованный код, установил его в колыбели и сделал его своим, но я нигде не могу найти этот пост.
В любом случае, вотРешение, которое я сделал из него.
Теперь кодировщик в настоящее время поддерживает только
, &
, "
, <
и >
, но добавить поддержку очень просто.для большего количества HTML-сущностей.
Прежде всего, вот кодер:
var Encoder = {
encode: (function() {
var translate_re = /&(nbsp|amp|quot|lt|gt);/g,
translate = {
'nbsp': String.fromCharCode(160),
'amp' : '&',
'quot': '"',
'lt' : '<',
'gt' : '>'
},
translator = function($0, $1) {
return translate[$1];
};
return function(s) {
if(typeof s === 'string')
return s.replace(translate_re, translator);
else
return s;
};
})(),
decode: (function() {
var reg_str = '(<|>|"|&|' + String.fromCharCode(160) + ')';
var translate_re = new RegExp(reg_str, 'g');
var translate = {
'&' : '&',
'"': '"',
'<' : '<',
'>' : '>'
};
translate[String.fromCharCode(160)] = ' ';
var translator = function($0, $1) {
return translate[$1];
};
return function(s) {
if(typeof s === 'string')
return s.replace(translate_re, translator);
else
return s;
};
})()
};
var Encoder = {
encode: (function() {
var translate_re = /&(nbsp|amp|quot|lt|gt);/g,
translate = {
'nbsp': String.fromCharCode(160),
'amp' : '&',
'quot': '"',
'lt' : '<',
'gt' : '>'
},
translator = function($0, $1) {
return translate[$1];
};
return function(s) {
if(typeof s === 'string')
return s.replace(translate_re, translator);
else
return s;
};
})(),
decode: (function() {
var reg_str = '(<|>|"|&|' + String.fromCharCode(160) + ')';
var translate_re = new RegExp(reg_str, 'g');
var translate = {
'&' : '&',
'"': '"',
'<' : '<',
'>' : '>'
};
translate[String.fromCharCode(160)] = ' ';
var translator = function($0, $1) {
return translate[$1];
};
return function(s) {
if(typeof s === 'string')
return s.replace(translate_re, translator);
else
return s;
};
})()
};
//Here is our string with HTML entities in it
var str = 'Non-Breaking Space: " ", Ampersand: "&", Quote: """, Less-Than: "<", Greater-Than: ">"';
//Lets get our div's
var output_not_endcoded = document.getElementById("output_not_endcoded");
var output_endcoded = document.getElementById("output_endcoded");
//If this div exists, add the string with the HTML entities as is
if(output_not_endcoded)
output_not_endcoded.innerHTML = str;
//If the other div exists, decode the HTML entities and set it as its contents
if(output_endcoded)
output_endcoded.innerHTML = Encoder.decode(str);
* {
font: 13.2px "Courier New", Arial, sans-serif;
}
body {
font-size: 100%;
}
.row {
width:100%;
height:auto;
padding: 8px 6px;
}
With HTML Entities:
<div id="output_not_endcoded" class="row" ></div>
<br/>
With HTML Entities Decoded:
<div id="output_endcoded" class="row" ></div>
Действительно легко добавить поддержку других сущностей HTML.
Глядя на кодировщик, вы увидите наш раздел перевода.Одна часть, содержащая регулярное выражение, а другая часть, содержащая наши поля перевода.
Регулярное выражение:
var translate_re = /&(nbsp|amp|quot|lt|gt);/g
Переводы:
translate = {
'nbsp': String.fromCharCode(160),
'amp' : '&',
'quot': '"',
'lt' : '<',
'gt' : '>'
}
Предположим, вы хотели добавить поддержку длясимвол авторского права "©."Имя сущности для этого символа: ©.
Чтобы добавить поддержку этого символа, просто добавьте его в регулярное выражение и перевод:
Регулярное выражение:
var translate_re = /&(nbsp|amp|quot|lt|gt|copy);/g
Переводы:
translate = {
'nbsp': String.fromCharCode(160),
'amp' : '&',
'quot': '"',
'lt' : '<',
'gt' : '>',
'copy': '©',
}
Вам необходимо убедиться, что вы добавили поддержку функций кодирования и декодирования, если вы хотите полную поддержку вперед и назад для кодирования и декодирования.
И это все!Я надеюсь, что это помогло!