我想从字符串中删除HTML标记。例如,假设我们有以下字符串:
<p> example ive got a string</P>
如何编写删除<p><p>并返回“示例ive有字符串”的函数?
Answers:
该最安全的方式是依靠浏览器TextNode正确逃生的内容。这是一个例子:
function stripHTML(dirtyString) {
var container = document.createElement('div');
var text = document.createTextNode(dirtyString);
container.appendChild(text);
return container.innerHTML; // innerHTML will be a xss safe string
}
document.write( stripHTML('<p>some <span>content</span></p>') );
document.write( stripHTML('<script><p>some <span>content</span></p>') );
这里要记住的一点是,浏览器逃脱TextNodes的特殊字符,当我们访问HTML字符串(innerHTML,outerHTML)。相比之下,访问文本值(innerText,textContent)将产生原始字符串,这意味着它们是不安全的,并可能包含XSS。
如果使用jQuery,则使用.text()是安全的并且向后兼容。查看此问题的其他答案。
如果使用的浏览器<= Internet Explorer 8,则使用纯JavaScript的最简单方法是:
string.replace(/(<([^>]+)>)/ig,"");
但是用正则表达式解析HTML存在一些问题,因此这不会提供很好的安全性。另外,这仅处理HTML字符,因此它不是完全xss安全的。
console.log( stripHTML('<script><p>some <span>content</span></p>') );将返回'<p>some <span>content</span></p>'
使用.text()功能:
var text = $("<p> example ive got a string</P>").text();
更新:正如Brilliand在下面指出的那样,如果输入字符串不包含任何标签并且您不够幸运,则可能会将其视为CSS选择器。因此,此版本更强大:
var text = $("<div/>").html("<p> example ive got a string</P>").text();
$("<div/>").html("<p> example ive got a string</P>").text()代替。
$('<span>'+content+'</span>').text();
<script>标签被剥离,你只是留下了alert('hello');
这是获取url图像,从某些项目中逃脱p标记的示例。
尝试这个:
$('#img').attr('src').split('<p>')[1].split('</p>')[0]
您可以使用现有的拆分功能
一个简单易行的例子:
var str = '<p> example ive got a string</P>';
var substr = str.split('<p> ');
// substr[0] contains ""
// substr[1] contains "example ive got a string</P>"
var substr2 = substr [1].split('</p>');
// substr2[0] contains "example ive got a string"
// substr2[1] contains ""
该示例只是向您展示拆分的工作方式。