从文本JavaScript中删除HTML

我与影子孤独终老i 提交于 2020-01-06 14:03:48

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

有没有一种简单的方法可以在JavaScript中获取html字符串并去除html?


#1楼

这是一个解决@MikeSamuel安全问题的版本:

function strip(html)
{
   try {
       var doc = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null);
       doc.documentElement.innerHTML = html;
       return doc.documentElement.textContent||doc.documentElement.innerText;
   } catch(e) {
       return "";
   }
}

请注意,如果HTML标记不是有效的XML,则它将返回一个空字符串(aka,标记必须关闭并且属性必须用引号引起来)。 这不是理想的选择,但是确实避免了潜在的安全利用问题。

如果您没有有效的XML标记,则可以尝试使用:

var doc = document.implementation.createHTMLDocument("");

但是由于其他原因,这也不是一个完美的解决方案。


#2楼

使用jQuery,您可以简单地通过使用来检索它

$('#elementID').text()

#3楼

为纯文本电子邮件转换HTML,使超链接(a href)保持完整

由hypoxide发布的上述函数可以正常工作,但是我进行了一些工作,基本上可以转换在Web RichText编辑器(例如FCKEditor)中创建的HTML,并清除所有HTML,但是由于我想要HTML和纯文本版本,以帮助为STMP电子邮件创建正确的部分(HTML和纯文本)。

经过长时间的搜索,我自己和我的同事们都使用Javascript中的正则表达式引擎提出了以下建议:

str='this string has <i>html</i> code i want to <b>remove</b><br>Link Number 1 -><a href="http://www.bbc.co.uk">BBC</a> Link Number 1<br><p>Now back to normal text and stuff</p>
';
str=str.replace(/<br>/gi, "\n");
str=str.replace(/<p.*>/gi, "\n");
str=str.replace(/<a.*href="(.*?)".*>(.*?)<\/a>/gi, " $2 (Link->$1) ");
str=str.replace(/<(?:.|\s)*?>/g, "");

str变量开始像这样:

this string has <i>html</i> code i want to <b>remove</b><br>Link Number 1 -><a href="http://www.bbc.co.uk">BBC</a> Link Number 1<br><p>Now back to normal text and stuff</p>

然后在代码运行之后,它看起来像这样:-

this string has html code i want to remove
Link Number 1 -> BBC (Link->http://www.bbc.co.uk)  Link Number 1


Now back to normal text and stuff

如您所见,所有HTML都已删除,并且链接已被保留,超链接文本仍然完整无缺。 另外,我还用\\n (换行符)替换了<p><br>标记,以便保留了某种可视格式。

要更改链接格式(例如BBC (Link->http://www.bbc.co.uk) ),只需编辑$2 (Link->$1) ,其中$1是href URL / URI,而$2是超链接的文本。 通过直接在纯文本主体中的链接,大多数SMTP邮件客户端都会将其转换,因此用户可以单击它们。

希望您觉得这个有帮助。


#4楼

我自己创建了一个工作正则表达式:

str=str.replace(/(<\?[a-z]*(\s[^>]*)?\?(>|$)|<!\[[a-z]*\[|\]\]>|<!DOCTYPE[^>]*?(>|$)|<!--[\s\S]*?(-->|$)|<[a-z?!\/]([a-z0-9_:.])*(\s[^>]*)?(>|$))/gi, ''); 

#5楼

作为jQuery方法的扩展,如果您的字符串可能不包含HTML(例如,如果您尝试从表单字段中删除HTML)

jQuery(html).text();

如果没有html,将返回一个空字符串

采用:

jQuery('<p>' + html + '</p>').text();

代替。

更新:正如已经指出了意见,在某些情况下,该解决方案将执行JavaScript的包含在html如果值html可以被攻击的影响,使用不同的解决方案。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!