Comme d'autres l'ont suggéré, cela peut être réalisé avec HtmlAgilityPack.
public static class HtmlTextEncoder
{
public static string HtmlEncode(string html)
{
if (html == null) return null;
var doc = new HtmlDocument();
doc.LoadHtml(html);
EncodeNode(doc.DocumentNode);
doc.OptionWriteEmptyNodes = true;
using (var s = new MemoryStream())
{
doc.Save(s);
var encoded = doc.Encoding.GetString(s.ToArray());
return encoded;
}
}
private static void EncodeNode(HtmlNode node)
{
if (node.HasChildNodes)
{
foreach (var childNode in node.ChildNodes)
{
if (childNode.NodeType == HtmlNodeType.Text)
{
childNode.InnerHtml = HttpUtility.HtmlEncode(childNode.InnerHtml);
}
else
{
EncodeNode(childNode);
}
}
}
else if (node.NodeType == HtmlNodeType.Text)
{
node.InnerHtml = HttpUtility.HtmlEncode(node.InnerHtml);
}
}
}
Ce parcourt tous les noeuds dans le code HTML, et remplace tous les nœuds de texte avec le texte codé en HTML. Je ai créé un .NET fiddle to demonstrate this technique.
Avez-vous absolument besoin de coder ces valeurs ou pouvez-vous simplement tout sortir en tant qu'unicode? Si vous avez vraiment besoin d'encoder le texte, je dirais probablement que vous allez devoir passer par le Html Agility Pack. Mais rappelez-vous que € est un caractère Unicode valide si vous définissez correctement le type MIME. –