在代码标签之外转义黑名单html标签

时间:2013-06-11 19:31:20

标签: javascript regex

我有一个(白色)标签列表,我将允许其作为code标签的html 。对于<code>标签内的任何html,我想在javascript中使用正则表达式来替换&lt;和&gt;带有&amp;#60的字符;和&amp; 62;

因此<b>符号应该在<code><b>bold</b></code>内替换,而不是<code>代码本身 - 它们应该保留为html。

我不想在<script>块之外允许<code>标记,因此我的白名单中不会有'script'。如果脚本标记位于代码标记内,则应执行ascii替换。

这与RTE在stackoverflow上的工作方式非常相似。

我需要使用javascript + regex在所有客户端执行此操作。任何帮助将不胜感激。

由于

1 个答案:

答案 0 :(得分:1)

基本上你可以做这样的事情

function changeCode() {
    var codeTags = document.getElementsByTagName('code');
    for(var i = 0; i < codeTags.length; i++) {
        var current = codeTags[i];
        current.innerHTML = current.innerHTML.replace(/</g, "&#60;").replace(/>/g, "&#62;");
    }
}
window.onload = changeCode; //executes after the DOM is ready

但它需要做一些工作,它只是通过简单的正则表达式更改转义<code>字符的<,>标记的HTML。无论如何,你应该添加类似公共类或名称的东西,以便循环只能在你想要的代码标签上执行该函数。

    for(var i = 0; i < codeTags.length; i++) {
        var current = codeTags[i];
        if (current.className.indexOf('someclass') !== -1 || current.name !== 'somename') continue;
        current.innerHTML = current.innerHTML.replace(/</g, "&#60;").replace(/>/g, "&#62;");
    }