Javascript JQuery字符串清理html

Javascript JQuery字符串清理html,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,对于我正在制作的脚本,我让用户将文本插入文本区域,该文本应包含“脏”html。 我想获取用户输入并“清理”它包含的html。 假设用户插入以下字符串: 示例 我希望它输出如下: 示例 我已经成功地制作了一个脚本来检测标记的使用,并可以删除它,但是如上所述,我不想完全删除它,只想“清理”它。 到目前为止,我掌握的代码是: 编辑: 形式{ 宽度:98.5%; 身高:90%; } div{ 位置:绝对位置; } #左内容,#右内容{ 宽度:50%; 身高:80%; } #底部内容物{ 底部:5%;

对于我正在制作的脚本,我让用户将文本插入文本区域,该文本应包含“脏”html。 我想获取用户输入并“清理”它包含的html。 假设用户插入以下字符串:
示例
我希望它输出如下:
示例

我已经成功地制作了一个脚本来检测
标记的使用,并可以删除它,但是如上所述,我不想完全删除它,只想“清理”它。 到目前为止,我掌握的代码是:

编辑:


形式{
宽度:98.5%;
身高:90%;
}
div{
位置:绝对位置;
}
#左内容,#右内容{
宽度:50%;
身高:80%;
}
#底部内容物{
底部:5%;
宽度:99%;
身高:10%;
}
文本区{
宽度:100%;
身高:100%;
}
#右内容{
右:10px;
}
输入[type=“submit”]{
宽度:100%;
身高:100%;
字体大小:粗体;
字体大小:76px;
}
插入文本
结果
//短代码
函数matchRuleShort(str,rule){
返回新的RegExp(“^”+rule.split(“*”).join(“.*”)+“$”).test(str);
}
//表格发送
$(“表格”)。提交(功能(e){
var insert=$(“.left”).val();//左字段
如果(插入==“Vul-tekst in”| |插入==”){//检查是否插入了文本
$(“.right”).html(“请更改文本!”);
}否则{
变量结果=$(“”+插入+“”);
result.find('h2')
.replaceWith(function(){return this.childNodes});//这将删除整个标记
var res=result.html();
$(“.right”).html(res);

//提醒(matchRuleShort)(插入“一些问题指南。 1.使用ID操作输入文本。 2.使用ID作为唯一,您已将相同ID用于两个输入。 3.最后,您可以使用Val()或empty清除值,但必须首先为请求获取值


如果不是解决方案,请详细说明问题…

您是否将输入解析为php

<?php $clean = preg_replace("/<([a-z][a-z0-9]*)[^>]*?(\/?)>",'<$1$2>', $dirty); ?>

使此问题重复的页面中的解决方案容易受到恶意脚本注入的攻击。请检查:(并等待5秒左右) …在真实场景中-您将不会收到警报框消息

var-str='';
var walk\u the\u DOM=函数walk(节点,func){
func(节点);
node=node.firstChild;
while(节点){
walk(节点,func);
node=node.nextSibling;
}
};
var wrapper=document.createElement('div');
wrapper.innerHTML=str;
遍历DOM(包装器、函数(el){
如果(el.removeAttribute){
删除属性(“id”);
删除属性(“风格”);
删除属性(“类”);
}
});
结果=wrapper.innerHTML;
//警告(结果);
正如这里所建议的:当用户询问如何通过使用正则表达式来实现这一点时,其想法是遍历DOM并对每个元素使用
removeAttribute()


我不知道您的用例是什么,但也许搜索
HTML清理
也会对您有所帮助。我发现:

Oops,完全没有注意到我使用了两次该ID,现在就删除了它们-因为它们最终不再需要(至少现在),我在哪里使用val()?我可以从左侧字段获取用户输入,但如果我将其添加到res或result中,它将不再做任何事情,试图详细说明一下:我正在尝试扫描文本(用户输入)中的html标记(h2、p等),并将其清除为基本形式(例如变成)虽然我可以移除整个标签,但我无法清理它,我知道的唯一常量是标签的开口(有没有一种方法可以在Javascript/JQuery中实现这一点?我不想使用php来实现这一点,这样用户就不必重新加载页面了。那么你可以使用ajax,但它会比简单的js复杂得多。使用js可以使用.removeAttr(元素)。使用纯js进行foreach或使用JQuery.JQuery.fn.removeAttributes=function(){返回this.each(function(){var attributes=$.map(this.attributes,function(item){return item.name;});var img=$(this);$.each(attributes,function(i,item){img.removeAttr(item);});}var res res res result.removeAttributes().html();谢谢,这似乎很好地满足了我的需要,但我更喜欢删除类,因为它显示在页面上可能会附加css,当我尝试添加if for类或添加or语句到if for class remove时,它只删除类并保留样式,是否有办法同时执行这两个操作或建议使用risk类?@DevelopmentSideShowMedia fast fix是将类和\或id属性添加到过滤器中,如:
if(/(^on | style | class | id)/i测试(…
我曾尝试将|类添加到该if语句中,它会删除该类,但会留下样式标记,如果元素同时具有类和内联样式,它不会同时删除它们,即使我复制粘贴它,它也不会同时从同一元素中删除它们。文章中将其标记为重复的解决方案在删除时起到了作用这两个都是。@DevelopmentSideShowMedia是的,你是对的-检查升级版本我正在使用它来清除表单或整个文档的代码,以证明任何字符串html都可以。哦,非常好的发现,那里的第一个答案似乎确实解决了我的问题,谢谢!@Bekim他的答案有效,如果没有的话包含多个我需要剥离的东西,但这一个可以很容易地处理这两个。
<?php $clean = preg_replace("/<([a-z][a-z0-9]*)[^>]*?(\/?)>",'<$1$2>', $dirty); ?>