感谢阅读!
var data = "<html><head><title>Hello</title></head><body>Hello Body</body></html>";
我想打印包含HTML标签的data
,而不需要浏览器呈现HTML标签,只显示“Hello Body”。
我试过了:
str = str.replace("<", "");
但徒劳无功。
答案 0 :(得分:11)
data = data.replace(/</g, "<").replace(/>/g, ">");
当浏览器遇到<
(称为字符实体)时,它会用文字“&lt;”替换它,使您能够在页面上显示HTML标记而不进行渲染。
/</g
是一个正则表达式,只是说“匹配所有”&lt;'在字符串“中,g
表示全局执行。没有g
,它只会替换第一个'&lt;'它遇到了。
最后需要注意的是,使用jQuery等库可以做得更好。这是一种很容易出错的东西,并且错过了边缘情况。让经过强化,经过良好测试和安全的库函数为您完成。
答案 1 :(得分:9)
实际(更安全的修复)如下:
function htmlspecialchars(text){
return jQuery('<div/>').text(text).html();
}
在纯JavaScript中,那将是:
function htmlspecialchars(text){
var tnd=document.createTextNode(text);
var div=document.createElement("DIV");
div.appendChild(tnd);
return div.innerHTML;
}
答案 2 :(得分:3)
这很丑,但你可以试试这个(借用Prototype的escapeHTML()
实现):
var data = "<html> <head> <title> Hello </title> </head> <body> Hello Body </body> </html>"
.replace(/&/g,'&')
.replace(/</g,'<')
.replace(/>/g,'>');
document.write(data);
当然,创建一个小帮助函数会更好。