2010-08-20 5 views

Répondre

1

Encodez la chaîne entière, puis décodez les tags spécifiques que vous ne voulez pas encoder.

Si vous autorisez uniquement les balises simples sans aucun attribut (comme par exemple <b> et <u>), alors vous pouvez les décoder en utilisant un Replace simple.

1

En supposant que votre code HTML d'entrée est bien formé, vous pouvez utiliser une expression régulière. Cela est possible car vous n'essayez pas de trouver des paires correspondantes dans les balises imbriquées et vous ne vous inquiétez pas des balises qui se produisent dans les commentaires HTML. Sinon, une expression régulière serait un mauvais candidat pour ce travail.

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); 

Si votre HTML provient d'utilisateurs, vous ne pouvez pas supposer qu'il est bien formé. Dans un tel cas, je recommanderais une solution plus robuste, par ex. en utilisant le Html Agility Pack.

Questions connexes