如何在Android中剥离或转义html标签

PHP具有strip_tagsfunction,可从string中去除HTML和PHP标记。

Android有没有办法转义HTML?

通过@sparkymat链接到答案的解决scheme通常需要正则expression式(这是一种容易出错的方法),或者安装第三方库(如jsoup或jericho) 。 Android设备上更好的解决scheme就是使用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); } else { return Html.fromHtml(html); } } 

这使用Android构build的Htmlparsing器来构buildinputhtml的Spanned表示,而不使用任何html标记。 然后通过将输出转换回string来剥离“跨度”标记。

正如这里所讨论的,自从Android N以来,Html.fromHtml行为已经发生了变化。请参阅文档以获取更多信息。

如果您的目标是API 16或更高版本,则可以使用Html.escapeHtml(String)

也可以使用下面的类来调用HtmlUtils.escapeHtml(String) ,它只是从Html.escapeHtml(String)的源代码中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("&lt;"); } else if (c == '>') { out.append("&gt;"); } else if (c == '&') { out.append("&amp;"); } 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("&nbsp;"); i++; } out.append(' '); } else { out.append(c); } } } } 

我正在使用这个工作正常的类。

对不起后期,但我认为这可能有助于其他人,

只是删除HTML条

 Html.fromHtml(htmltext).toString() 

这样html标签将被replace为string,但string将不会正确格式化。 所以我做了

 Html.fromHtml(htmltext).toString().replaceAll("\n", "").trim() 

这样我首先用blanklinereplacenextline,并删除空格。 同样,你可以删除其他人。

这是替代新方法(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()); 

用jsoup这个很简单

 public static String html2text(String html) { return Jsoup.parse(html).text(); }