PHP 有 strip_tags函数,它从字符串中去除 HTML 和 PHP 标记。
strip_tags
Android 有逃脱 html 的方法吗?
通常情况下,这个问题的解决方案要么需要正则表达式(这是一种容易出错的方法) ,要么需要安装第三方库,比如 汤或 Jericho。在 Android 设备上,一个更好的解决方案是使用 Html.from Html ()函数:
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 解析器来构建输入 Html 的 Spanned表示,而不使用任何 Html 标记。然后,通过将输出转换回字符串来剥离“ Span”标记。
Spanned
如前所述,从 Android N 开始,Html.from Html 的行为已经发生了变化,更多信息请参见 文件。
如果您的目标是 API 16或更高,您也可以选择使用 Html.escapeHtml(String)。
Html.escapeHtml(String)
对于 API 16以下的目标,您可以通过调用 HtmlUtils.escapeHtml(String)来使用下面的类,我只是从 Html.escapeHtml(String)的源代码中提取了这个类。
HtmlUtils.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 条
Html.fromHtml(htmltext).toString()
这样 html 标签将被字符串替换,但字符串不会被正确格式化。因此我这样做了
Html.fromHtml(htmltext).toString().replaceAll("\n", "").trim()
这样我首先用下一行替换空格,然后删除空格。同样你也可以删除其他空格。
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());
这是针对新方法的替代方案(API 16 +) :
android.text.Html.escapeHtml(your_html).toString();
这是非常简单的 汤
public static String html2text(String html) { return Jsoup.parse(html).text(); }
From Html 对于大的 html 字符串来说可能非常慢。
下面是使用 jsoup 可以做到这一点的方法,它既简单又快捷:
将这一行添加到你的等级文件中:
implementation 'org.jsoup:jsoup:1.11.3'
点击这里查看最新的 jsoup 版本: Https://jsoup.org/download
将这一行添加到代码中:
String text = Jsoup.parse(htmlStr).text();
点击这里了解如何保持换行符:
如何保持断行时,使用 jsoup 转换 HTML 为纯文本?
因为还没有提到,所以以向后兼容的方式完成这项工作的方法是使用 HtmlCompat 实用工具类,并简单地调用(如果不需要使用特定的标志,则使用0)
HtmlCompat.from(inputString, 0).toString()
在引擎盖下,它已经为您完成了所有必需的 api 检查
if (Build.VERSION.SDK_INT >= 24) { return Html.fromHtml(source, flags); } return Html.fromHtml(source);
对于输入
<a href="https://www.stackoverflow.com">Click me!</a>
您将只收到字符串“ Click me!”作为输出。