2013-09-20 1 views
5

Jsoup를 통과하는 HTML (String)이 있으므로 모든 href 및 src 특성에 추가 할 수 있습니다. 그러나 일부 특수 HTML 문자의 경우 Jsoup가 그 문자를 “에서 실제 문자 으로 변환하고 있음을 알았습니다. 전후에 값을 출력하고 그 변화를 봅니다.특수 HTML 기호에 문제가있는 경우 ‘ — 등

하기 전에 :

THIS — IS A “TEST”. 5 > 4. trademark: ™ 

후 :

THIS — IS A “TEST”. 5 > 4. trademark: ? 

도대체 무슨 일이야? 나는 이것을 피하기 위해 Jsoup 물건 이전에 특수 문자를 HTML 엔티티로 특별히 변환하고있었습니다. 따옴표는 실제 따옴표로 변경되고,보다 큼은 같았으며 상표는 물음표로 변경되었습니다. 아아아아.

참고로, 내 Jsoup 코드는하고있다 : 어떤 도움

Document document = Jsoup.parse(fileHtmlStr); 
//some stuff 
String modifiedFileHtmlStr = document.html(); 

감사합니다!

답변

8

아래 코드는 입력 마크 업과 유사합니다. 특정 문자의 이스케이프 모드를 변경하고 유니 코드를 지원하지 않는 시스템의 TM 기호를 이스케이프하도록 ASCII 모드를 설정합니다.

출력 :

<p>THIS &mdash; IS A &ldquo;TEST&rdquor;&period; 5 &gt; 4&period; trademark&colon; &#x99;</p> 

코드 :

Document doc = Jsoup.parse("" + 
    "<p>THIS &mdash; IS A &ldquo;TEST&rdquo;. 5 &gt; 4. trademark: &#153;</p>"); 

Document.OutputSettings settings = doc.outputSettings(); 

settings.prettyPrint(false); 
settings.escapeMode(Entities.EscapeMode.extended); 
settings.charset("ASCII"); 

String modifiedFileHtmlStr = doc.html(); 

System.out.println(modifiedFileHtmlStr); 
+0

최고, 감사합니다 ... 마법처럼 일했다. 나는 Jsoup에 익숙하지 않고 자신의 사이트에있는 요리 책에서 이것을 보지 못했습니다. – mikato

+0

@Andrew Chaschev settings.escapeMode (Entities.EscapeMode.extended); 엔터티를 찾을 수 없으므로 오류가 발생합니다. 내 질문을보십시오. http://stackoverflow.com/questions/20908946/jsoup-adding-extra-encoded- stuff-for-an-html –

+0

@Andrew Chaschev 엔티티 클래스가 작동 중입니다. jsoup의 1.6.1 버전을 설치했는데 이제는 HTML 파일이 더 나빠졌습니다. 모든 곳에서 appanding하고 개행합니다. 도움이됩니다. –