PHP具有strip_tags
从字符串中剥离HTML和PHP标签的功能。
Android是否有逃脱html的方法?
Answers:
@sparkymat链接到的答案中的解决方案通常需要使用正则表达式(这是一种容易出错的方法)或安装第三方库(例如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.escapeHtml(String)
如果只想转义标签而不删除标签,也可以使用。
Html.fromHtml(html).toString();
删除多个空格并不总是一个好的选择。
不好意思,我认为这对其他人可能会有所帮助,
只需删除html条
Html.fromHtml(htmltext).toString()
这样,html标记将被替换为字符串,但是字符串的格式将不正确。因此我做到了
Html.fromHtml(htmltext).toString().replaceAll("\n", "").trim()
这样,我首先用具有空格的nextline替换并删除了空格。同样,您可以删除其他人。
Html.escapeHtml(String)
如果您定位的是API 16或更高版本,则可以选择使用。
对于也在API 16以下定位的目标,您可以改为调用以下类,HtmlUtils.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("<");
} 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字符串可能非常慢。
使用jsoup可以轻松快速地做到这一点:
将此行添加到您的gradle文件中:
implementation 'org.jsoup:jsoup:1.11.3'
在此处检查最新的jsoup版本:https : //jsoup.org/download
将此行添加到您的代码中:
String text = Jsoup.parse(htmlStr).text();
在此处检查此链接以了解如何保留换行符:
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();
}
由于尚未提及,以向后兼容的方式执行此操作的方法是使用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!”。作为输出。
Html.fromHtml(String)
返回的扩展类CharSequence
。因此,您可以将其直接用于接受CharSequence
参数的方法,而无需调用toString()
。