HTML için kaçış metni


136

Nasıl C # html kullanımı için metin kaçmak? ben yapmak istiyorum

sample="<span>blah<span>"

ve sahip

<span>blah<span>

yalnızca html :( etiketleri yerine ASP ile değil C # kullanarak

c#  html  escaping 

Yanıtlar:


185
using System.Web;

var encoded = HttpUtility.HtmlEncode(unencoded);

3
Unicode karakterleri unicode olmayan karakterlere de kodlamak istiyorsanız, şuna bakın: stackoverflow.com/questions/82008/…
Gyuri

4
Kötü yolu bulmak istemediğiniz bir şey: Yukarıdaki yöntem tek başına kontrol karakterlerinden kaçmaz. Kabul edilen cevaba buradan bakın: stackoverflow.com/a/4501246/1543677 ve her ikisini de kullanın.
pkExec

HttpUtility artık mevcut değil (win store uygulamaları)
Tertium

82

Ayrıca, System.Webmontajı kullanmak istemiyorsanız bunu kullanabilirsiniz :

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

Başına bu makalede , arasındaki fark System.Security.SecurityElement.Escape()ve System.Web.HttpUtility.HtmlEncode()eski de kesme işareti kodlar olmasıdır (')karakterleri.


7
Tam olarak HTML olmayan XMLSecurityElement.Escape() için kaçış demek değildir.
Victor Sergienko

System.Security.SecurityElement, Windows Mağazası uygulamalarında mevcut değil
Tertium

47

Eğer ya da yukarıdaki .NET 4 kullanıyor ve referansa istemiyorsanız System.Web, kullanabileceğiniz WebUtility.HtmlEncodedanSystem

var encoded = WebUtility.HtmlEncode(unencoded);

Bu aynı etkiye sahiptir ve HttpUtility.HtmlEncodetercih edilmelidir System.Security.SecurityElement.Escape.


Neden SecurityElement.Escape yerine tercih edilmeli? İkincisinde güvenlik açıkları var mı veya eski güvenlik açığı daha mı yetenekli?
Travis

7
@Travis İkisinde de bir güvenlik açığı yoktur, yalnızca SecurityElement.EscapeXML HtmlEncodeüzerinde çalışan ve HTML üzerinde çalışan ve XML ve HTML kodlamanın biraz farklı gereksinimleri vardır ( ayrıntılar için bu cevaba bakın). Yani, örneğin, SecurityElement.Escapeizin verilir &apos;, ancak izin verilir HtmlEncode.
Alex

1
@Travis Sanırım daha da iyi bir "mazeret" System.Net'in Taşınabilir Sınıf Kütüphaneleri tarafından kullanılabilmesi ve diğer iki seçeneğin bu sabah görünmüyor / görünmüyor olması. ; ^)
Aralık'ta


6

.NET 4.0 ve üstü:

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

5

Sen gerçek html etiketleri kullanabilirsiniz <xmp>ve </xmp>çıkışa dize olarak xmp etiketleri arasında etiketlerin tüm göstermektir.

Ya da sunucu üzerinde kullanabilirsiniz Server.UrlEncodeveya HttpUtility.HtmlEncode.


Soruyu daha açık hale getirdim. Kullanıcıların yapabileceği gibi etiketlerin html olmasını istemiyorum </pre> ve kırmak.

Büyük yazı teşekkürler adam bu tam olarak ne aradığını sabit!
Spets

1
<xmp>uzun zaman önce kaldırıldı: stackoverflow.com/questions/8307846/... kullanımı <pre>yerine
mortb

1

Bunu burada görmedim

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

Böyle html ile uğraşırken işe yarayan tek şeydi (asp 4.0+). &apos;Olarak işlenen alır 'başarısız olmasına neden html (htmldecode kullanılarak):

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

1

HtmlEncode tarafından kaldırılmayan ve Edge veya IE'de doğru görüntülenmeyecek bazı özel tırnak karakterleri vardır ”ve“. bu karakterleri aşağıdaki işlev gibi bir şeyle değiştirebilirsiniz.

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

Muhtemelen yanlış kodlamayı kullanarak içerik sunuyorsunuz. IE ve Edge'in bu karakterleri görüntülemede hiçbir sorunu yoktur.
Bouke

0

Gelecekte bunu Razor sayfalarında yapmanın basit bir yolunu arayanlar için aşağıdakileri kullanın:

.Cshtml dosyasında:

@Html.Raw(Html.Encode("<span>blah<span>"))

.Cshtml.cs dosyasında:

string rawHtml = Html.Raw(Html.Encode("<span>blah<span>"));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.