如何使用JavaScript或JQuery编码和解码HTML实体?
var varTitle = "Chris' corner";
我希望它是:
var varTitle = "Chris' corner";
发布于 2011-04-27 05:35:11
您可以尝试如下所示:
var Title = $('<textarea />').html("Chris' corner").text();
console.log(Title);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
更具交互性的版本:
$('form').submit(function() {
var theString = $('#string').val();
var varTitle = $('<textarea />').html(theString).text();
$('#output').text(varTitle);
return false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="#" method="post">
<fieldset>
<label for="string">Enter a html-encoded string to decode</label>
<input type="text" name="string" id="string" />
</fieldset>
<fieldset>
<input type="submit" value="decode" />
</fieldset>
</form>
<div id="output"></div>
发布于 2012-03-08 05:36:37
我建议不要使用被接受为答案的jQuery代码。虽然它不会将要解码的字符串插入到页面中,但它确实会导致创建脚本和HTML元素等内容。这比我们需要的代码多得多。相反,我建议使用更安全、更优化的函数。
var decodeEntities = (function() {
// this prevents any overhead from creating the object each time
var element = document.createElement('div');
function decodeHTMLEntities (str) {
if(str && typeof str === 'string') {
// strip script/html tags
str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
element.innerHTML = str;
str = element.textContent;
element.textContent = '';
}
return str;
}
return decodeHTMLEntities;
})();
要使用这个函数,只需调用decodeEntities("&")
,它将使用与jQuery版本相同的底层技术-但没有jQuery的开销,并且在清理输入中的HTML标记之后。有关如何过滤HTML标签的信息,请参阅接受答案中的Mike Samuel's comment。
通过在您的项目中添加以下代码行,可以轻松地将此函数用作jQuery插件。
jQuery.decodeEntities = decodeEntities;
发布于 2017-02-12 07:07:08
这是我最喜欢的解码HTML字符的方法。使用此代码的好处是标记也会被保留。
function decodeHtml(html) {
var txt = document.createElement("textarea");
txt.innerHTML = html;
return txt.value;
}
输入:
Entity: Bad attempt at XSS:<script>alert('new\nline?')</script><br>
输出:
Entity: Bad attempt at XSS:<script>alert('new\nline?')</script><br>
https://stackoverflow.com/questions/5796718
复制相似问题