【发布时间】:2013-06-18 08:42:41
【问题描述】:
我想使用 javascript 从给定字符串中删除 html 标签。我研究了当前的方法,但存在一些未解决的问题。
当前解决方案
(1) 使用javascript,创建虚拟div标签并获取文本
function remove_tags(html)
{
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent||tmp.innerText;
}
(2) 使用正则表达式
function remove_tags(html)
{
return html.replace(/<(?:.|\n)*?>/gm, '');
}
(3) 使用 JQuery
function remove_tags(html)
{
return jQuery(html).text();
}
这三种方案都可以正常工作,但是如果字符串是这样的
<div> hello <hi all !> </div>
剥离的字符串就像
hello 。但我只需要删除 html 标签。喜欢hello <hi all !>
已编辑:背景是,我想删除特定文本区域的所有用户输入 html 标记。但我想让用户输入<hi all> 类型的文本。在当前方法中,它会删除包含在 .
【问题讨论】:
-
如果你想对无效的 HTML 进行特殊的解析规则,你需要编写一个解析器。请注意,最后一个 jQuery 版本与第一个版本没有什么不同,并且正则表达式不会为琐碎的输入以外的任何事情做这项工作。
-
对 RobG 的评论的补充:如果您解释一下背景可能会有所帮助,以便我们提出更好的解决方案。你为什么要为此使用 JavaScript?来自哪里的 HTML 无效?
-
@RobG:在这种特殊情况下,我不同意。我想我在下面有一个相当强大的解决方案,非常感谢您的意见。
-
@chacka 关于您的编辑:您不应该为此使用 JavaScript。 JavaScript 很容易被绕过,删除危险的 HTML 很重要。例如在服务器端使用标记库,就像 Stackoverflow 在本网站上所做的那样。他们将删除和/或转义任何有问题的 HTML。
-
@RoToRa:Stack Overflow 还提供使用 JavaScript 呈现的实时预览。不过我同意,常识说在存储到数据库或输出到页面之前在服务器上进行清理。
标签: javascript jquery html string