当HTML可能格式错误时,替换所有实例特定标记

时间:2013-02-07 10:29:48

标签: jquery asp-classic

我们正在尝试编写一个脚本,用其内容替换已弃用的标记,例如<font>。我们所拥有的是:

while($("font").length > 0) {
    $("font").each(function() {
        $(this).replaceWith($(this).html());
    });
}

while循环只是因为如果用它的内容替换字体标记,并且其中一个元素子元素也是一个字体标记,那么它就会捕获父元素和子元素。

我们的问题是我们无法控制输出的内容 - 这是由我们的客户输入的。我们最近看到的格式错误的HTML的一个例子是<p><font><span><font><div></font><strong></strong><strong></div></span></font></p>。显然这是严重畸形的,在理想的世界中,我们的客户会正确地输入它。上述脚本在所有不错的浏览器中都能完美地运行 - Chrome,Firefox&amp; Safari - 令人惊讶的是IE 9.然而它在IE 6-8中断,导致这些标签中的所有内容都没有显示。我们的目标是更换所有字体标签,并且仍然显示其中的内容。

有没有人知道我们能用jQuery或经典ASP达到预期效果的方式吗?

另请注意,在此特定客户端案例中,它非常基本 - 仅请求替换1个标记。其他情况包括Word将文本从Word传输到网站时添加的标记<i><b><span>等等。

提前致谢, 问候, 理查德

1 个答案:

答案 0 :(得分:0)

更换所有&lt; font&gt;会不会更容易?和&lt; / font&gt;输出中的标签?在给定的情况下,这仍然不会提供验证的XHTML代码(&lt; div&gt;在&lt; span&gt;,unclosed&lt; strong&gt;内),但也许只需查看文本即可。

以下是使用regexp在经典ASP中执行此操作的方法:

function removeFontTags(s_text)
    dim obj_regex
    set obj_regex = new RegExp

    obj_regex.IgnoreCase = true
    obj_regex.Global = true
    obj_regex.Pattern = "\<\/?font\>"

    removeFontTags = obj_regex.replace(s_text, "")

    set obj_regex = Nothing
end function

Response.Write removeFontTags("<p><font><span><font><div></font><strong></strong><strong></div></span></font></p>")

' returns: <p><span><div><strong></strong><strong></div></span></p>

但也许您可以通过这种方式添加更多卫生设施来展示您的需求。