htmlencode()仅用于特定标签

时间:2010-08-20 06:14:12

标签: c# asp.net

我有一个长字符串dat可以包含h​​tml标签 应用htmlencode将编码所有标签 但我希望这种方法保留一些特定的标签 怎么可能

2 个答案:

答案 0 :(得分:1)

对整个字符串进行编码,然后解码您不想编码的特定标记。

如果您只允许没有任何属性的简单标记(例如<b><u>),那么您可以使用简单的Replace解码它们。

答案 1 :(得分:1)

假设您的输入HTML格式正确,您可以使用正则表达式。这是可能的,因为您没有尝试在嵌套标记中找到匹配的对,并且您不担心HTML注释中出现的标记。否则正则表达式将成为这项工作的不良候选人。

var allowedTags = new[] { "a", "abbr", "br", /* etc. */ };

var output = Regex.Replace(input,
    // Matches a single start or end tag
    @"</?(\w+)[^>]*>",
    // If the tag is one of the allowed tags...
    me => allowedTags.Contains(me.Groups[1].Value)
        // ... keep it unchanged
        ? me.Value
        // otherwise, HTML-encode it
        : HttpServerUtility.HtmlEncode(me.Value),
    RegexOptions.Singleline);

如果您的HTML来自用户,那么您不能认为它格式正确。在这种情况下,我会建议一个更强大的解决方案,例如使用Html Agility Pack