修改htmlEntities流行的javascript函数以保留"<br>"子字符串

Modify htmlEntities popular javascript function to preserve "<br>" substrings

本文关键字:quot lt gt 字符串 br 保留 流行 htmlEntities javascript 函数 修改      更新时间:2023-09-26

我的问题是基于这个SO问题的好答案。如何用JavaScript编码字符串以在HTML中显示?

function htmlEntities(str) {
    return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
}

我需要相同的,但应该在字符串中保留每个"<br>"子字符串。然后寻找修改函数CCD_ 2的最佳方式。

谢谢。

有比我的解决方案更聪明的吗?

function htmlEntitiesModified(str) {
    return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace('&lt;br&gt;', '<br>');
}
//.replace('&lt;br&gt;', '<br>') was added to the end.

请投票,如果这个解决方案是优雅和良好的,所以我知道。非常感谢。

尝试

function htmlEntities(str) {
        return String(str)
               .replace(/&/g, '&amp;')
               .replace(/<[^<br]/g, '&lt;') // negate `<br`
               .replace(/[^br+| '/>]>/g, '&gt;') // negate `br>` or `br />`
               .replace(/"/g, '&quot;');
    }

var unsafestring = "<br><oohlook&atme><br><br />string";
function htmlEntities(str) {
    return String(str).replace(/&/g, '&amp;').replace(/<[^<br]/g, '&lt;').replace(/[^br+| '/>]>/g, '&gt;').replace(/"/g, '&quot;');
}
document.body.innerText = htmlEntities(unsafestring);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

我很惊讶没有人回答这个问题。你可以直接使用浏览器自己为你进行转义。没有任何regex比让浏览器做它最擅长的事情,处理HTML更好或更安全。

function escapeHTML(str){
    var p = document.createElement("p");
    p.appendChild(document.createTextNode(str));
    return p.innerHTML;
}

或使用Option()构造函数的简短替代

function escapeHTML(str){
    return new Option(str).innerHTML;
}