i have a long string dat can contain html tags applying htmlencode will encode all the tags but i want this method to leave some specific tags intact how is it possible
Кодируйте всю строку, затем декодируйте определенные теги, которые вы не хотите кодировать.
Если вы разрешаете только простые теги без каких-либо атрибутов (например,
и
), вы можете декодировать их с помощью простой Заменить
.
Предполагая, что ваш входной 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 .