2014-04-24 6 views
1

jsoup를 사용하여 HTML을 마칩니다. 어떻게 문자열에서 HTML 엔티티를 제거 할 수 있습니다android에서 jsoup로 html 엔티티 제거

<span class="some">&#8237;&#8237;78&#8236;&#8236;</span> 

는 단지

<span class="some">78‬‬</span> 

같이해야한다 : 나는 다음과 같은 종류의 HTML 태그로부터 정보를 추출하는 문제가 무엇입니까?

+0

html에서 문자열을 가져 오시겠습니까? –

+0

예 jsoup로 압축을 풀면 HTML 엔터티가 없으므로 공간이 필요합니다. – user3568736

+0

원하는 내용은 http://stackoverflow.com/questions/17643512/android-string-encoding-and-html-entities- –

답변

0

jsoup에 익숙하지 않지만 "표준"HTML DOM을 반환하는 "일반"HTML DOM Parser 인 경우 원하는 것은 실제로 가능하지 않습니다. 문제는 일단 DOM이 만들어지면 정상적으로 인코딩 된 문자와 더 이상 엔터티로 표현 된 문자를 구분할 수 없다는 것입니다.

: <span>A</span><span>&#65;</span>과 완전히 동일한 것으로 간주되고, DOM 번 구별 될 수 없다 - 모두 텍스트 A와 텍스트 노드를 포함 span 요소이다.

그래서 당신이 할 수있는 루프가 모든 텍스트 노드를 초과하고, 이러한 문자 (안 기관) 교체 검색 : 당신은 원시 문자와 개체를 구별해야하는 경우

void removeInvalidChars(Element element) { 
    for (Node child : element.childNodes()) { 
    if (child instanceof TextNode) { 
     TextNode textNode = (TexNode) child; 
     textNode.text(textNode.text().replaceAll("\u202C", "").replaceAll("\u202D", "")); 
     // 202C and 202D are the hex codes for the decimal values 8236 and 8237 
    } else if (child instanceof Element) { 
     removeInvalidChars((Element) child); 
    } 
    } 
} 

을, 당신은해야합니다 다른 비 DOM (예 : 이벤트 기반) HTML 구문 분석기를 사용합니다.