【推荐】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
可以被攻击的影响,使用不同的解决方案。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3152749