我想通过 JavaScript 函数将文本显示为 HTML。如何在 JavaScript 中转义 HTML 特殊字符?有API吗?
我可以在 JavaScript 中转义 HTML 特殊字符吗?
IT技术
javascript
html
2021-01-17 10:06:12
6个回答
这是一个几乎适用于所有网络浏览器的解决方案:
function escapeHtml(unsafe)
{
return unsafe
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
如果您只支持现代网络浏览器(2020+),那么您可以使用新的replaceAll函数:
const escapeHtml = (unsafe) => {
return unsafe.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('"', '"').replaceAll("'", ''');
}
function escapeHtml(html){
var text = document.createTextNode(html);
var p = document.createElement('p');
p.appendChild(text);
return p.innerHTML;
}
// Escape while typing & print result
document.querySelector('input').addEventListener('input', e => {
console.clear();
console.log( escapeHtml(e.target.value) );
});
<input style='width:90%; padding:6px;' placeholder='<b>cool</b>'>
您可以使用 jQuery 的.text()
函数。
例如:
从有关该.text()
功能的 jQuery 文档:
我们需要注意,此方法会根据需要对提供的字符串进行转义,以便在 HTML 中正确呈现。为此,它调用 DOM 方法 .createTextNode(),不会将字符串解释为 HTML。
以前版本的 jQuery 文档是这样表述的(强调了添加):
我们需要注意,此方法会根据需要对提供的字符串进行转义,以便在 HTML 中正确呈现。为此,它调用 DOM 方法 .createTextNode(),该方法将特殊字符替换为其 HTML 实体等效项(例如 < for <)。
我想我找到了正确的方法来做到这一点......
// Create a DOM Text node:
var text_node = document.createTextNode(unescaped_text);
// Get the HTML element where you want to insert the text into:
var elem = document.getElementById('msg_span');
// Optional: clear its old contents
//elem.innerHTML = '';
// Append the text node into it:
elem.appendChild(text_node);
其它你可能感兴趣的问题