2009-12-11 1 views
0

사용자가 만든 HTML을 가져 오기 위해 FreeTextBox 편집기를 사용하고 있습니다. 이 문제는이 편집기가 "<>"을 제외한 HTML 엔터티의 특수 문자를 변환하지 못한다는 것을 나타냅니다. theHTML = Server.HtmlEncode(theHTML)을 사용할 수 없습니다. 태그 및 매개 변수를 포함한 모든 HTML을 변환하기 때문에 theHTML.Replace 행의 피할 수없는 목록을 만들고 싶지 않기 때문입니다.태그 및 매개 변수를 변경하지 않고 특수 문자를 HTML 항목으로 변환합니다.

외부 엔티티로 변환 할 수있는 다른 기능이나 방법이 있습니까? 외부 태그 만 사용할 수 있습니까?

+0

내가 이해하고 있는지 확인하기 위해 예약 된 HTML 문자 (&, <,>, ', ", ...)를 HTML 엔터티로 변환하려고하지만 <,>이 아닌", "태그 자체는 정확합니까? – David

+0

오른쪽 태그 만 바꿀 수 있습니다. – backslash17

답변

0

많은 것을 검색 한 후 FreeTextBox 구성 요소의 잘못된 속성을 사용하고있는 것으로 나타났습니다. 속성은 ConvertHtmlSymbolsToHtmlCodes이되어야합니다.

또한 태그 매개 변수 및 태그를 둘러싼 강력한 유효성 검사를 사용하므로 XHTML 페이지에 코드를 삽입해야하는 경우 FormatHtmlTagsToXhtml을 사용하는 것이 좋습니다.

0

나는 Linq를 XML로 사용하고 각 요소와 속성 노드의 값을 인코딩하여 각 요소를 파싱 할 것을 제안합니다. 나는 약간의 코드를 생각해 낼 것이다. 그러나 헤이 ∥ 그것은 금요일에 5 pm 다!

1

<은 태그 시작을 의미하고 <은 리터럴 미만 소문자를 의미하므로 무시할 태그와 그렇지 않은 것을 구분할 수 없습니다.

에 대해이 같은 불쾌한 신뢰할 수없는 정규식 뭔가를 사용하여 종래 형성 시작 또는 끝 태그되지 않은 < 용도를 발견하는 것입니다 할 수있는 모든 :

<(?!\w+(\s+\w+="[^"<]*")*\s*/?>|/\w+\s*>) 

&lt;로 교체. 마찬가지로 &&amp; 함께 : (이스케이프 할 > 일반적으로하지 않습니다.)

&(?!\w+;|#\d+;|#x[0-9A-Fa-f]+;) 

이 요소를 구성하는 모든 가능한 유효한 방법을 허용하지 않습니다, 그것은 수

깨진 잘못 중첩 된 요소 , 존재하지 않는 엔티티를 포함하며 주석과 같은 비 요소 구문을 엉망으로 만듭니다. regex는 HTML을 파싱 할 수 없기 때문에 HTML에 바삭 바삭한 깨진 비트가 추가되지 않습니다.

그래서 거의 확실하지 않습니다. 실수로 div를 열어 둔 상태에서 페이지를 손상시키지 않는 적절한 마크 업을 원한다면 가장 좋은 첫 번째 단계는 XHTML로 구문 분석하고 올바른 형식의 XML이 아닌 경우 오류로이를 거부하는 것입니다.

리터럴 <이 이스케이프 처리되지 않은 출력을 생성하는 서식있는 텍스트 편집기 구성 요소가있는 경우 해당 구성 요소를 덜 겁나는 것으로 교체해야합니다. 그러나 일반적으로 사용자가 HTML을 만들도록하는 것은 좋지 않습니다. 왜냐하면 실제로 HTML을 쓰레기로 만들기 때문입니다. 게다가 누구나 HTML을 입력 할 수있게함으로써 자바 스크립트로 사이트와 보안을 망칠 수 있습니다. 더 간단한 텍스트 마크 업 언어가 종종 승리합니다.

+0

리터럴 <은 precisly 이스케이프 된 유일한 것입니다! – backslash17

+0

그래서 문제가되는 것이 유일한 앰퍼샌드입니까? 두 번째 정규식은이를 수정해야합니다. – bobince