2009-08-04 3 views
3

"스마트"HTML 인코딩을 수행하는 가장 좋은 방법을 찾고 있습니다. 예를 들어 : 대해 HTMLEncode 호출하는 것처럼 스마트 HTML 인코딩

From: <a>Next >></a> to: <a>Next gt;gt;</a> 
From: <p><a><b><< Prev</b></a><br/><a>Next >></a></p> to: <p><a><b>&lt;&lt; Prev</b></a><br/><a>Next gt;gt;</a></p> 

그래서 텍스트 만의 비 XML/HTML 부분은 인코딩 될 것이다.

제안 사항?

편집 : 가능한 한 경량이어야합니다. 수신 텍스트는 HTML 인코딩에 대한 지식이없는 사용자가 입력합니다.

+2

Smart는 "HTML 쓰기"또는 "일반 텍스트 쓰기"입니다 - 문자열의 어느 부분이 HTML인지, HTML에서 특별한 의미를 갖는 문자를 사용하는 텍스트인지를 경험적으로 판단하려는 시도는 * 어렵습니다 100 % 신뢰성). – Quentin

+0

예 완벽한 솔루션을 찾고 있습니다. HTML 태그가있는 텍스트를 삽입하는 옵션이 사용자에게 있습니다. 그러나 >>와 같이 HTML이 아닌 것을 삽입하는 데 사용됩니다. 그래서 나는 최종 내용이 괜찮은지 확인하려고 노력해야한다. 사용자에게 >과 <을 사용해야한다고 설명하는 것은 매우 어렵습니다. – Drejc

답변

-4

아마도이 문제에 대해 좋은 정규식을 작성하려고합니다. 코드 숨김 (C#) 또는 JavaScript를 사용하여 클라이언트 측에서이 작업을 수행하고 있습니까?

http://www.regular-expressions.info/

+0

정규 표현식을 사용하여 비정규 데이터를 구문 분석하는 것이 최선의 방법은 아닙니다. 가장 좋은 방법은 이미 언급 한 DOM을 직접 조작하는 것입니다. – Xetius

6

예 : 소스 코드로하지 쓰기 HTML을한다. 대신 모든 인코딩 문제를 처리하는 DOM과 같은 API로 작업하십시오.

+0

물론이 컨텐트가 이미 존재하고 생성기를 변경할 수 없다면 직접 컨텐트를 조작하려고합니다. 어휘 구문 분석을 시도해보십시오. 어떠한 경우에도 정규 표현식으로 시도하지 마십시오. 적어도, 당신이 당신의 온건함을 유지하기를 원하지 않는다면. – Xetius

2

견고하고 완전히 신뢰할 수있는 C# 솔루션 (중량급)을 원하면 HTML Agility Pack library을 사용하십시오. 그런 다음 노드를 반복하고 내용을 HTML로 인코딩 할 수 있습니다. 그것은 정규 표현식보다 조금 더 방탄이지만 분명히 더 강렬합니다.

클라이언트 쪽에서 사용하려면 JQuery를 사용하십시오. Encode HTML entities with jQuery을 참조하십시오.

0

아마도 당신은 잘못된 문제를 해결하려고합니다. 사용자가 다음 아마도 그들은 또한 <> 또는 <b>을 쓸 수있을 것 HTML에 >><<을 인코딩되지 않은 쓸 수있는 경우

(나는. 이것은 당신이 듣고 싶은 아니라는 것을 알고) 그 경우 방법이 없습니다 텍스트와 마크 업을 확실하게 구별 할 수 있습니다. (XSS 공격에 취약해질 수 있음을 염두에 두지 마십시오.) 전에 실제로는 가로 채어 HTML로 보간해야합니다. HTML로 보간됩니다. 아마도 당신은 당신에게 문제가되는 워크 플로를 설명해야 할 것입니다. 그것을 해결할 더 좋은 방법이 있어야합니다.

댓글에 대한 응답으로 편집 : 텍스트 또는 HTML 일 수있는 입력을 안정적으로 인코딩 할 수있는 방법이 없습니다. 어쨌든 사용자가 원시 HTML을 입력 할 정도로 기술적 인 경우 엔 엔티티를 작성할 수 있습니다. 그렇지 않으면 원시 HTML을 처음부터 입력해서는 안됩니다. HTML 입력이 고급 사용자만을위한 경우 입력이 텍스트 또는 HTML인지 여부를 나타내는 확인란을 가질 수 있습니다. 하지만 리치 텍스트 편집기를 사용하는 것이 좋습니다.

+0

것은 HTML 태그를 입력하여 텍스트 서식을 지정할 수있는 기능 요청이 있습니다. 그러나 이전에는 텍스트가 항상 인코딩되었고 사용자는 HTML이 아닌 텍스트를 필드에 쓰는 데 사용되었습니다. 이제 내가 예를 들어 설명해 줄 수있는 몇 가지 정보가있을 것입니다. XML을 깨뜨리지 못하게하려면 "수정"할 방법을 찾고 있습니다. 입력을 가로 채는 것은 옵션이 아닙니다. 제어 할 수 없기 때문입니다. – Drejc

+0

@Drejc : 원래 질문에이 정보를 추가해야합니다. – JacquesB

0

tidy.net 사용에 대해 생각해 보셨나요? 당신은 당신의 사용자 입력을 그 안에 던져서 그것이 무엇이 어떻게 생기는지를 볼 수 있습니다. 그것은 매우 좋고 아주 좋으며 쓰레기를 당신이 실제로 원하는 것으로 바꾸는 것입니다. 그것의 DLL과 내가 믿는 모든 관리 코드는 당신이 쉽게 그것을 넣을 수 있습니다.

no regexp 밴드 왜건과 관련해서는 동의하지 않습니다. 데이터가 제한적이라면 (그렇지 않다고 말하지 않습니다.) 적어도 정리하지 않으면 입력 문자열의 유효성을 검사하기위한 몇 가지 규칙을 생각해 낼 수 있습니다. 나는 당신의 데이터가 사실상 어떤 것이라도 될 수는 있지만 다른 어떤 것을 사용하는 것이 더 낫지 만, 그것이 완전히 배제되어서는 안된다고 생각합니다.