javascript替换允许的html标记

javascript替换允许的html标记,javascript,jquery,Javascript,Jquery,我需要使用javascript删除所有html标记,但我明确允许的标记除外。我有一个表单,只允许以下标记及其各自的结束标记: <b> <strong> <i> <em> <u> <br> <pre> <blockquote> <ol> <ul> <li> <a href="http://www.somesite.com">link</a>

我需要使用javascript删除所有html标记,但我明确允许的标记除外。我有一个表单,只允许以下标记及其各自的结束标记:

<b> <strong> <i> <em> <u> <br> <pre>
<blockquote> <ol> <ul> <li> 
<a href="http://www.somesite.com">link</a>

应删除所有其他标记。我一直在搜索,但只找到了删除所有标记或单个标记的实例。这能简单地做到吗?我不能使用PHP,必须是javascript。有什么解决办法吗


谢谢

正如评论中指出的,这是不安全的。绕过javascript过滤器将非常容易。这必须在服务器端实现。

因此,要充分利用所有形式的安全性 这就是你为什么要这么做的原因

您可以将内容放入div并调用

jQuery.fn.removeTags = function()
{
    this.each(function()
    {
        if(jQuery(this).children().length == 0)
        {
            jQuery(this).replaceWith(jQuery(this).text());
        }
        else
        {
            jQuery(this).children().unwrap();
        }
    });
    return this;
};

jQuery("#container").find(":not(b, strong, i, em, u, br, pre, blockquote, ul, ol, li, a)").removeTags();
确保容器不高于
主体
标记。或者,当它去掉
head
html
script
等标记时,您可能会遇到问题

如果您想要:not也可以是一个列表,您可以:

或者甚至把它放在removeTags函数中。(可能性是无限的…)


编辑:正如一些人在评论中指出的那样:可以关闭Javascript。另一件事是我假设你想保留所有的内部信息。如果不是的话,就像megakorre建议的那样,一个remove()就足够了。

不。你必须使用PHP,否则你的安全措施是无用的。如果它是用于内部网的,我认为安全性不是问题。只是功能。但是,是的,不要使用javascript…作为一个javascript练习,是的,我相信您可以编写一些正则表达式来查找标记,如果它们不在允许的标记列表中,则可以删除它们,但正如已经指出的那样,对于实际应用程序,您必须在服务器端执行此操作。我会认真考虑防止/删除所有角度的HTML HTML标签,而不是允许BBCode /论坛风格方括号标签,只有您定义的标签转换为真正的HTML标签,稍后显示。您最好使用一些服务器端PHP/ASP或一些东西,虽然这工作,我已经决定使用BB代码类型的样式,并转换它们。
jQuery.fn.removeTags = function()
{
    this.each(function()
    {
        if(jQuery(this).children().length == 0)
        {
            jQuery(this).replaceWith(jQuery(this).text());
        }
        else
        {
            jQuery(this).children().unwrap();
        }
    });
    return this;
};

jQuery("#container").find(":not(b, strong, i, em, u, br, pre, blockquote, ul, ol, li, a)").removeTags();
var mylist = ["b" ,"strong", ... etc. etc.];
jQuery(":not(" + mylist.join(", ") + ")").removeTags();