有谁知道在jQuery 中从字符串中转义 HTML 的简单方法?我需要能够传递任意字符串并将其正确转义以在 HTML 页面中显示(防止 JavaScript/HTML 注入攻击)。我确信可以扩展 jQuery 来做到这一点,但我目前对框架的了解还不够多。
使用 jQuery 转义 HTML 字符串
IT技术
javascript
jquery
string
escaping
2021-01-30 04:58:38
6个回答
var entityMap = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": ''',
'/': '/',
'`': '`',
'=': '='
};
function escapeHtml (string) {
return String(string).replace(/[&<>"'`=\/]/g, function (s) {
return entityMap[s];
});
}
// before:
// <div class="someClass">text</div>
var someHtmlString = "<script>alert('hi!');</script>";
// set a DIV's text:
$("div.someClass").text(someHtmlString);
// after:
// <div class="someClass"><script>alert('hi!');</script></div>
// get the text in a string:
var escaped = $("<div>").text(someHtmlString).html();
// value:
// <script>alert('hi!');</script>
$('<div/>').text('This is fun & stuff').html(); // "This is fun & stuff"
来源:http : //debuggable.com/posts/encode-html-entities-with-jquery : 480f4dd6-13cc-4ce9-8071-4710cbdd56cb
如果您要转义 HTML,那么我能想到的只有三个是真正必要的:
html.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
根据您的用例,您可能还需要执行诸如"
to 之类的操作"
。如果列表足够大,我将只使用一个数组:
var escaped = html;
var findReplace = [[/&/g, "&"], [/</g, "<"], [/>/g, ">"], [/"/g, """]]
for(var item in findReplace)
escaped = escaped.replace(findReplace[item][0], findReplace[item][1]);
encodeURIComponent()
只会为 URL 转义它,而不是为 HTML。