Android에서 HTML 태그를 제거하거나 이스케이프하는 방법
PHP에는 strip_tags
문자열에서 HTML 및 PHP 태그를 제거하는 기능이 있습니다.
Android에 html을 이스케이프 할 수있는 방법이 있습니까?
@sparkymat에 연결된 답변의 솔루션에는 일반적으로 오류가 발생하기 쉬운 접근 방식 인 regex 또는 jsoup 또는 jericho 와 같은 타사 라이브러리 설치가 필요합니다 . Android 기기에서 더 나은 솔루션은 Html.fromHtml () 함수를 사용하는 것입니다.
public String stripHtml(String html) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY).toString();
} else {
return Html.fromHtml(html).toString();
}
}
이것은 Android의 내장 Html 파서를 사용하여 Spanned
html 태그없이 입력 html 의 표현 을 빌드 합니다. 그런 다음 출력을 다시 문자열로 변환하여 "Span"마크 업을 제거합니다.
여기 에서 설명했듯이 Html.fromHtml 동작은 Android N 이후로 변경되었습니다. 자세한 내용은 문서 를 참조하세요.
늦은 게시물에 대해 죄송하지만 다른 사람에게 도움이 될 것 같습니다.
html 스트립 만 제거하려면
Html.fromHtml(htmltext).toString()
이렇게하면 html 태그가 문자열로 대체되지만 문자열 형식이 제대로 지정되지 않습니다. 따라서 나는했다
Html.fromHtml(htmltext).toString().replaceAll("\n", "").trim()
이런 식으로 먼저 다음 줄을 공백으로 바꾸고 공백을 제거했습니다. 마찬가지로 다른 항목을 제거 할 수 있습니다.
Html.escapeHtml(String)
API 16 이상을 대상으로 하는 경우 대신 사용할 수 있습니다 .
API 16 이하를 대상으로하는 경우에는 HtmlUtils.escapeHtml(String)
.NET의 소스에서 가져온 다음을 호출하여 아래 클래스를 대신 사용할 수 있습니다 Html.escapeHtml(String)
.
public class HtmlUtils {
public static String escapeHtml(CharSequence text) {
StringBuilder out = new StringBuilder();
withinStyle(out, text, 0, text.length());
return out.toString();
}
private static void withinStyle(StringBuilder out, CharSequence text,
int start, int end) {
for (int i = start; i < end; i++) {
char c = text.charAt(i);
if (c == '<') {
out.append("<");
} else if (c == '>') {
out.append(">");
} else if (c == '&') {
out.append("&");
} else if (c >= 0xD800 && c <= 0xDFFF) {
if (c < 0xDC00 && i + 1 < end) {
char d = text.charAt(i + 1);
if (d >= 0xDC00 && d <= 0xDFFF) {
i++;
int codepoint = 0x010000 | (int) c - 0xD800 << 10 | (int) d - 0xDC00;
out.append("&#").append(codepoint).append(";");
}
}
} else if (c > 0x7E || c < ' ') {
out.append("&#").append((int) c).append(";");
} else if (c == ' ') {
while (i + 1 < end && text.charAt(i + 1) == ' ') {
out.append(" ");
i++;
}
out.append(' ');
} else {
out.append(c);
}
}
}
}
나는 잘 작동하는이 수업을 사용하고 있습니다.
Html.fromHtml은 큰 html 문자열의 경우 매우 느릴 수 있습니다.
Here's how you can do it, easily and fast with jsoup:
Add this line to your gradle file:
implementation 'org.jsoup:jsoup:1.11.3'
Check what is the latest jsoup version here: https://jsoup.org/download
Add this line to your code:
String text = Jsoup.parse(htmlStr).text();
Check this link here to learn how to preserve line breaks:
How do I preserve line breaks when using jsoup to convert html to plain text?
This is for new method alternative (API 16+):
android.text.Html.escapeHtml(your_html).toString();
Spanned spanned;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
spanned = Html.fromHtml(textToShare, Html.FROM_HTML_MODE_LEGACY);
} else {
spanned = Html.fromHtml(textToShare);
}
tv.setText(spanned.toString());
This is dead simple with jsoup
public static String html2text(String html) {
return Jsoup.parse(html).text();
}
참고URL : https://stackoverflow.com/questions/6502759/how-to-strip-or-escape-html-tags-in-android
'developer tip' 카테고리의 다른 글
클래스 멤버를 사용한 C ++ 콜백 (0) | 2020.10.21 |
---|---|
drop table과 truncate table의 차이점은 무엇입니까? (0) | 2020.10.20 |
UIImagePickerController에서 여러 이미지를 선택하는 방법 (0) | 2020.10.20 |
Django : 'current_tags'는 유효한 태그 라이브러리가 아닙니다. (0) | 2020.10.20 |
DateTimeField가 관리 시스템에 표시되지 않습니다. (0) | 2020.10.20 |