2011-09-20 7 views
1

나는 사용자 입력을 위생 처리하기 위해 AntiSamy을 사용하며 잘 작동한다. 한 가지 문제가 있습니다. 작은 따옴표와 큰 따옴표를 인코딩합니다. 그래서 뭔가를 편집하고 싶다면 대신 my sample's이 렌더링됩니다. 작은 따옴표가 인코딩됩니다.Java에서 작은 따옴표 및 큰 따옴표를 어떻게 인코딩 해제합니까?

: broswer가 따옴표를 올바르게 렌더링하지만 데이터베이스에 HTML 엔터티로 저장됩니다. 따라서 사용자가 편집을 위해 게시물을로드하면 HTML 엔티티가 텍스트 필드에 표시됩니다.

  1. 이 제한 사항을 해결할 수있는 방법이 있습니까?
  2. 다른 도구를 사용해야합니까/다른 도구가 있습니까?

내 사용자는 코드 및 기타 다양한 게시물을 게시 할 수 있습니다. 따라서 AntiSamy는 훌륭한 작업을 수행합니다. 그러나 나는 일반 텍스트에서 작은 따옴표와 큰 따옴표를 변환하고 싶지 않습니다.

어떤 옵션이 있습니까?

답변

2
String s = "string unencode ' "NOW""; 
String unencoded = s.replaceAll("'", "'").replaceAll(""","\""); 
myTextField.setText(unencoded); 
1

AntiSamy에 역전 방법이없는 경우 특히이 항목은 StringEscapeUtils.unesacpeHtml(..)의 commons-lang에서 처리 할 수 ​​있습니다.

브라우저는 '을 표시하는 방법을 알고 있으므로 문제가되지 않습니다. 텍스트 영역이나 기타 입력 제어 또는 브라우저 외부에 텍스트를 표시하려는 경우에만 위의 내용을 사용하십시오. 당신이 필요로하는 모든 입력에서 잠재적으로 위험한 문자를 이스케이프하는 경우

+0

미안하지만, 나 자신을 잘 설명하지 못했습니다. 사용자가 편집을 위해 게시물을로드 할 때 텍스트 필드에 HTML 엔티티가 포함 된 원시 텍스트가 표시됩니다. 그래서 AntiSamy는 DB에 도착하기 전에 제 물건을 인코딩하고 있습니다. 이건 괜찮아. StackOverFlow와 같이 일반 텍스트에서 작은 따옴표와 큰 따옴표를 인코딩하지 않기를 바랍니다. 그들은 모든 것을 인코딩하지만, 일반적인 텍스트 만 남겨두고 인용합니다. 나는 그것이 의미가 있기를 바랍니다. – dee

+0

또한 위험한 입력을 인코딩 할 수 있으므로 StringUnescapeUtils를 사용할 수 없습니다. 나는 단지 내가 인코딩하고 인코딩하지 않는 것에 대해 선택적이되고 싶다고 생각한다. – dee

+0

내 첫 단락은 당신에게 적합해야합니다 – Bozho

1

, 당신은 원시 형태의 데이터베이스에서 해당 입력을 저장하고 출력을 인코딩 할 수 있습니다.

인코딩 프로세스가 더 복잡하면 (즉, 일부 태그 허용 목록 또는 서식 규칙이 적용되는 경우) 표시 용 인코딩 HTML 버전과 편집 용 원시 버전의 두 가지 입력 버전을 저장할 수 있으며 HTML 버전을 업데이트 할 수 있습니다. 원시 버전이 수정됩니다.

+0

감사합니다. 일부 사용자는 다른 사용자의 게시물을 수정할 수 있기 때문에 약간 까다 롭습니다. 이것은 원문을에서까지 소독해야 함을 의미합니다. 그러나 hamrful 콘텐츠에 대해서는 위생적이어야하며 복잡한 서식 지정 규칙과 샘플 코드를 유지해야합니다.일반 텍스트에서 따옴표를 인코딩해서는 안됩니다. – dee

+0

좋은 예가 StackOverFlow가하는 방법입니다. 그들은 모든 것을 살균합니다. 그러나 게시물을 편집 할 때는 모든 것이 좋습니다. 작은 따옴표와 큰 따옴표는 인코딩되지 않습니다. – dee

+0

@dee : StackOverflow가 위에서 설명한 두 번째 방법을 사용한다고 생각합니다. – axtavt

관련 문제