2010-01-06 25 views
5

C# sitem, kullanıcıların sitede gösterilmek üzere HTML göndermelerini sağlar. HTML için izin verilen etiketleri ve özellikleri sınırlamak istiyorum, ancak bunu .net'de nasıl yapacağımı anlayamıyorum.Kullanıcı HTML'sini temizleyin. Net

Ben Html Agility Pack kullanarak denedim ama HTML nasıl değiştirileceğini görmüyorum, ben HTML geçmesi ve belirli verileri, ancak gerçekte bir çıktı dosyası beni derece manidar üreten görebilirsiniz.

HTML'de .net'i temizlemek için iyi bir örnek var mı? Çeviklik paketi cevap olabilir, ancak belgeler eksiktir.

+0

İyi soru. HTML kodunun gönderilmesine ve görüntülenmesine izin verdiğim zaman listemin en üstünde yer alır - genellikle sonuçları benim için biçimlendiren ve dezenfekte eden denetimleri kullanırım (örneğin, ASP.NET'te www.freetextbox.com) ancak sonucu gerçekten doğrulamam gerekir çok. Soru için +1. – Codesleuth

cevap

2

: düzgün biçimlendirilmiş XML, HTML döner SGMLReader ve siz okumak için izin verir SourceForge kapalı

node.ParentNode.RemoveChild(node); 
+0

Aradığım yöntem budur. Teşekkürler. – spaetzel

3

Yalnızca iyi oluşturulmuş HTML'yi kabul etmelisiniz.

Daha sonra ayrıştırmak ve değiştirmek için LINQ'ı XML'e kullanabilirsiniz.

Kullanıcıdan bir öğe alan ve beyaz listedeki bir grup etiket ve öznitelikle yeni bir öğe döndüren özyinelemeli bir işlev oluşturabilirsiniz. Örneğin

:

//Maps allowed tags to allowed attributes for the tags. 
static readonly Dictionary<string, string[]> AllowedTags = new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase) { 
    { "b", new string[0] }, 
    { "img", new string[] { "src", "alt" } }, 
    //... 
}; 
static XElement CleanElement(XElement dirtyElement) { 
    return new XElement(dirtyElem.Name, 
     dirtyElement.Elements 
      .Where(e => AllowedTags.ContainsKey(e.Name)) 
      .Select<XElement, XElement>(CleanElement) 
      .Concat(
       dirtyElement.Attributes 
        .Where(a => AllowedTags[dirtyElem.Name].Contains(a.Name, StringComparer.OrdinalIgnoreCase)) 
      ); 
} 

Eğer köprüler, javascript: URL'ler izin vermemek için emin olun izin verirsek; Bu kod bunu yapmaz. Girilecek istenmeyen etiketleri kaldırabilirsiniz HTMLAgilityPack ile

+0

+1 Nice - "Ev yapımı" yaklaşımı severim. –

0

bunu sağlayacak bir araçtır kullanılabilir Bir XmlReader veya daha fazla işlem için bir XmlDocument nesnesine yükleyin. Bunu her zaman düzgün bir şekilde biçimlendirilmiş HTML'de olmayan web sayfalarını ayrıştırmak için kullanmıştım.

0

Açık Kaynak kodlu ve MarkdownSharp numaralı telefona bir göz atıp buradaki çocuklar tarafından mı oluşturulmuşsunuz?

İlgili konular