PHP a strip_tags
fonction qui supprime les balises HTML et PHP d'une chaîne.
Android at-il un moyen d'échapper au HTML?
Les solutions dans la réponse liée à @sparkymat nécessitent généralement soit regex - qui est une approche sujette aux erreurs - soit l'installation d'une bibliothèque tierce telle que jsoup ou jericho . Une meilleure solution sur les appareils Android consiste simplement à utiliser la fonction 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();
}
}
Cela utilise l'analyseur Html intégré d'Android pour construire une représentation Spanned
du html d'entrée sans balises html. Le balisage "Span" est ensuite supprimé en convertissant la sortie en une chaîne.
Comme indiqué ici , le comportement de Html.fromHtml a changé depuis Android N. Voir la documentation pour plus d'informations.
Désolé pour la publication tardive, mais je pense que cela pourrait aider les autres,
Pour supprimer simplement les bandes html
Html.fromHtml(htmltext).toString()
De cette façon, la balise html sera remplacée par une chaîne, mais la chaîne ne sera pas formatée correctement. C'est pourquoi je l'ai fait
Html.fromHtml(htmltext).toString().replaceAll("\n", "").trim()
De cette façon, je remplace d'abord par la ligne suivante avec un espace vide et un espace vide supprimé. De même, vous pouvez en supprimer d'autres.
Vous pouvez également utiliser Html.escapeHtml(String)
si vous ciblez l'API 16 ou une version ultérieure.
Pour également cibler en dessous de l'API 16, vous pouvez utiliser à la place la classe ci-dessous en appelant HtmlUtils.escapeHtml(String)
que j'ai simplement extraite de la source de 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);
}
}
}
}
J'utilise cette classe qui fonctionne bien.
Html.fromHtml peut être extrêmement lent pour les grandes chaînes html.
Voici comment vous pouvez le faire, facilement et rapidement avec jsoup:
Ajoutez cette ligne à votre fichier gradle:
implementation 'org.jsoup:jsoup:1.11.3'
Vérifiez quelle est la dernière version de jsoup ici: https://jsoup.org/download
Ajoutez cette ligne à votre code:
String text = Jsoup.parse(htmlStr).text();
Consultez ce lien ici pour savoir comment conserver les sauts de ligne:
C'est pour une nouvelle alternative de méthode (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());
C'est très simple avec jsoup
public static String html2text(String html) {
return Jsoup.parse(html).text();
}