我有一个长字符串dat可以包含html标签 应用htmlencode将编码所有标签 但我希望这种方法保留一些特定的标签 怎么可能
答案 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。