146 votes

Échapper le texte pour HTML

Comment échapper du texte pour une utilisation en HTML en C#? Je veux faire

sample="blah"

et avoir

blah

apparaître en tant que texte brut au lieu de seulement blah avec les balises faisant partie du HTML :(. Utilisation de C#, pas ASP

190voto

Michael S. Scherotter Points 7330
utilisant System.Web;

var encoded = HttpUtility.HtmlEncode(nonEncoded);

3 votes

Si vous voulez également encoder les caractères unicode en non-unicode, consultez ceci : stackoverflow.com/questions/82008/…

5 votes

Quelque chose que vous ne voulez pas découvrir de la mauvaise manière : La méthode ci-dessus ne permet pas d'échapper aux caractères de contrôle par elle-même. Voir la réponse acceptée ici: stackoverflow.com/a/4501246/1543677 et utiliser les deux.

0 votes

HttpUtility n'existe plus (applications de magasin Windows)

91voto

ondatra Points 1115

Aussi, vous pouvez utiliser ceci si vous ne voulez pas utiliser l'assemblée System.Web:

var encoded = System.Security.SecurityElement.Escape(unencoded)

Conformément à cet article, la différence entre System.Security.SecurityElement.Escape() et System.Web.HttpUtility.HtmlEncode() est que le premier encode également les caractères apostrophe (').

10 votes

Ne pas dire SecurityElement.Escape() échappe pour XML ce qui n'est pas exactement HTML.

0 votes

System.Security.SecurityElement n'existe pas dans les applications Windows Store

0 votes

Notez que System.Security.SecurityElement.Escape ne supprime ni n'échappe au caractère 31, qui nous a affecté une fois à partir d'un extrait de données du répertoire actif

59voto

Alex Points 4247

Si vous utilisez .NET 4 ou une version ultérieure et que vous ne voulez pas référencer System.Web, vous pouvez utiliser WebUtility.HtmlEncode de System

var encoded = WebUtility.HtmlEncode(unencoded);

Cela a le même effet que HttpUtility.HtmlEncode et devrait être préféré à System.Security.SecurityElement.Escape.

0 votes

Pourquoi devrait-il être préféré à SecurityElement.Escape? Y a-t-il des vulnérabilités dans ce dernier, ou est-ce que le premier est simplement plus performant?

9 votes

@Travis Il n'y a aucune vulnérabilité dans les deux, c'est juste que SecurityElement.Escape fonctionne sur XML et HtmlEncode fonctionne sur HTML, et le codage XML et HTML ont des exigences légèrement différentes (voir cette réponse pour plus de détails). Ainsi, par exemple, SecurityElement.Escape est autorisé à utiliser ', tandis que HtmlEncode ne l'est pas.

1 votes

@Travis Je pense que la "excuse" encore meilleure est que System.Net est disponible pour les bibliothèques de classes portables et que les deux autres options ne le sont pas/semblent ne pas l'être ce matin. ;^)

19voto

Nacht Points 644

En ASP.NET 4.0, il y a une nouvelle syntaxe pour faire cela. Au lieu de

<%= HttpUtility.HtmlEncode(non_encodé) %>

vous pouvez simplement faire

<%: non_encodé %>

En savoir plus ici:

Nouvelle syntaxe <%: %> pour encoder la sortie HTML en ASP.NET 4 (et ASP.NET MVC 2)

2 votes

Veuillez donner une syntaxe pour Razor ? @Nacht

5voto

Andrew Siemer Points 7226

Vous pouvez utiliser des balises html réelles

</code> et <code> pour afficher la chaîne telle quelle et montrer toutes les balises entre les balises xmp.

Ou vous pouvez également utiliser sur le serveur Server.UrlEncode ou HttpUtility.HtmlEncode.

0 votes

J'ai rendu la question plus claire. Je ne veux pas que les balises fassent partie du html car l'utilisateur peut faire et la casser.

0 votes

Super article merci mec, cela a exactement corrigé ce que je cherchais!

1 votes

</code> a été obsolète depuis longtemps : <a href="http://stackoverflow.com/questions/8307846/why-was-the-xmp-html-tag-deprecated" title="pourquoi la balise html xmp a été obsolète">stackoverflow.com/questions/8307846/&hellip;</a> utilisez <code><pre></code> à la place</x-turndown>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X