2010-01-06 3 views
5

내 C# 사이트는 사용자가 HTML을 제출하여 사이트에 표시되도록합니다. HTML에 허용 된 태그와 속성을 제한하고 싶지만 .net에서이를 수행하는 방법을 파악할 수 없습니다..net에서 깨끗한 사용자 HTML

나는 Html Agility Pack을 사용해 보았지만 HTML을 수정하는 방법이 보이지 않고 HTML을 통해 특정 데이터를 찾는 방법을 볼 수 있지만 실제로 출력 파일을 생성하는 것은 저를 당황하게합니다.

누구든지 .net에서 HTML을 정리하는 좋은 예가 있습니까? 민첩성 팩이 답 일지 모르지만 문서가 부족합니다.

+0

좋은 질문입니다. 이것은 HTML 코드를 제출하고 표시 할 때마다 내 목록의 맨 위에 있습니다. 일반적으로 저는 결과를 확인하고 결과를 확인해야합니다 (예 : ASP.NET의 www.freetextbox.com과 같은) 결과를 포맷하고 살균하는 컨트롤을 사용합니다. 너무. +1 질문. – Codesleuth

답변

2

: 올바른 형식의 XML로 HTML을 전환 SGMLReader이며로 읽을 수있는 소스 포지의 떨어져

node.ParentNode.RemoveChild(node); 
+0

그게 제가 찾고 있던 방법입니다. 감사. – spaetzel

3

올바른 형식의 HTML 만 허용해야합니다.

그런 다음 LINQ to XML을 사용하여 구문 분석하고 수정할 수 있습니다.

사용자로부터 요소를 가져 와서 허용 목록에있는 태그 및 특성 집합을 가진 새로운 요소를 반환하는 재귀 함수를 만들 수 있습니다. 예를 들어

:

//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)) 
      ); 
} 

당신이 하이퍼 링크, javascript: URL을 허용해야합니다 허용하는 경우; 이 코드는 그렇게하지 않습니다. 당신이 입력에서 원치 않는 태그를 제거 할 수 있습니다 HtmlAgilityPack와

+0

+1 니스 - "집에서 양조 한"방식이 좋습니다. –

0

당신이 사용할 수있는 도구를 사용할 수 있습니다 XmlReader를 추가 처리하거나 XmlDocument 개체로로드하여 처리 할 수 ​​있습니다. 필자는 항상 올바른 형식의 HTML이 아닌 웹 페이지를 구문 분석하기 위해 이것을 사용했습니다.

0

MarkdownSharp은 오픈 소스이며 여기에있는 사람들이 만들었습니까?