htmlencode() for a specific tags only

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

1
задан vakas 20 August 2010 в 06:14
поделиться

2 ответа

Кодируйте всю строку, затем декодируйте определенные теги, которые вы не хотите кодировать.

Если вы разрешаете только простые теги без каких-либо атрибутов (например, и ), вы можете декодировать их с помощью простой Заменить .

1
ответ дан 2 September 2019 в 21:58
поделиться

Предполагая, что ваш входной 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 .

1
ответ дан 2 September 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: