web-dev-qa-db-fra.com

Texte d'échappement pour HTML

Comment puis-je échapper au texte pour une utilisation HTML en C #? je veux faire 

sample="<span>blah<span>"

et avoir 

<span>blah<span>

afficher en texte brut au lieu de blah uniquement avec les balises faisant partie du code html: (. Utilisation de C # et non ASP

121
user34537
using System.Web;

var encoded = HttpUtility.HtmlEncode(unencoded);
167

En outre, vous pouvez l'utiliser si vous ne souhaitez pas utiliser l'assembly System.Web:

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

Per cet article , la différence entre System.Security.SecurityElement.Escape() et System.Web.HttpUtility.HtmlEncode() est que l'ancien code code également les caractères apostrophe (').

78
Tereza Tomcova

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 from 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.

42
Alex

personne n'a encore mentionné, dans ASP.NET 4.0, il existe une nouvelle syntaxe pour le faire. au lieu de

<%= HttpUtility.HtmlEncode(unencoded) %>

vous pouvez simplement faire

<%: unencoded %>

lisez plus ici: http://weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax-for-html-encoding-output-in-asp-net -4-and-asp-net-mvc-2.aspx

19
Nacht

Vous pouvez utiliser les balises HTML réelles <xmp> et </xmp> pour afficher la chaîne telle quelle, afin d'afficher toutes les balises entre les balises xmp.

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

5
Andrew Siemer

.NET 4.0 et supérieur:

using System.Web.Security.AntiXss;
//...
var encoded = AntiXssEncoder.HtmlEncode("input", useNamedEntities: true);
3
Victor

Je n'ai pas vu ça ici

System.Web.HttpUtility.JavaScriptStringEncode("Hello, this is Satan's Site")

c'était la seule chose qui fonctionnait (asp 4.0+) quand on traitait du HTML comme ça. Le&apos; est rendu sous la forme ' (en utilisant htmldecode) dans le code HTML, ce qui entraîne l'échec de l'opération:

<a href="article.aspx?id=268" onclick="tabs.open('modules/xxx/id/268', 'It&apos;s Allstars'); return false;">It's Allstars</a>
1
Contra

il y a des caractères de guillemets spéciaux qui ne sont pas supprimés par HtmlEncode et ne seront pas affichés dans Edge ou IE correctement comme "et". vous pouvez, dans la mesure du possible, remplacer ces caractères par quelque chose de similaire à la fonction ci-dessous.

private string RemoveJunkChars(string input)
{
    return HttpUtility.HtmlEncode(input.Replace("”", "\"").Replace("“", "\""));
}
0
Iman Abidi