HTML代码如何仅在代码中转义,某些代码不会被转义?

时间:2013-11-30 12:40:38

标签: javascript php jquery html regex

当使用某些在线文本编辑器(例如Stack Overflow本身的文本编辑器)时,我们发现允许使用某些标签,例如<b><i>等,并且在指定的代码部分中,所有HTML标签都是逃脱了。

怎么可能?我尝试使用jQuery,我认为他们使用正则表达式,但我没有太多使用正则表达式的经验。

我通过jQuery AJAX和PHP脚本成功完成了这些工作,其中使用jQuery的htmlspecialchars()函数显示结果(使用.html()转义除了某些允许的标签之外)。但是,我发现它很容易受到XSS攻击。我也试过了.text(),但它逃脱了所有标签,包括我试图不逃避的标签,AJAX加载也需要时间。

我该如何做这样的事情?

1 个答案:

答案 0 :(得分:0)

您可以使用tinymce作为编辑器并在文本区域初始化它,在初始化之后您可以使用

tinyMCE.init({
    selector: "textarea",
    valid_children : "+body[style],-body[div],p[strong|a|#text]"
});

通过这样做,您允许编辑器仅使用某些html标签,其余的将被转义。

valid_children使您可以控制哪些子元素可以存在于哪些父元素中。默认情况下,TinyMCE将删除/拆分任何非HTML过渡内容。因此,例如P不能是另一个P元素的子元素。

此选项的语法是以逗号分隔的父级列表,其中包含应作为该元素的有效子级添加/删除的元素。因此,例如“+ body [style]”会将样式添加为正文的有效子项。

希望这会对你有所帮助