如何在Android中删除或转义html标记

Kri*_*ris 77 android strip-tags

PHP具有strip_tags从字符串中剥离HTML和PHP标记的功能.

Android有办法逃脱HTML吗?

Nic*_*eet 231

@sparkymat链接的答案中的解决方案通常需要正则表达式 - 这是一种容易出错的方法 - 或安装第三方库,如jsoupjericho.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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这使用Android内置的Html解析器来构建Spanned输入html 的表示,而不需要任何html标记.然后通过将输出转换回字符串来剥离"跨度"标记.

随着讨论这里,Html.fromHtml行为已经改变,因为Android的N.请参阅文档获取更多信息.

  • 另请注意`Html.fromHtml(String)`返回`CharSequence`的扩展类.因此,您可以直接使用接受`CharSequence`参数的方法,而无需调用`toString()`.谢谢尼克的好回答:-) (5认同)
  • 如果你只是想在不删除它们的情况下转义标记,你也可以使用`Html.escapeHtml(String)`. (4认同)
  • 请注意,`Html.fromHtml(html).toString();`删除多个空格,这并不总是一个好选择. (4认同)

yub*_*del 13

对于迟到的帖子感到抱歉,但我认为这对其他人有帮助,

要删除html条带

Html.fromHtml(htmltext).toString()
Run Code Online (Sandbox Code Playgroud)

这样html标记将被替换为字符串,但字符串将无法正确格式化.因此,我做到了

Html.fromHtml(htmltext).toString().replaceAll("\n", "").trim()
Run Code Online (Sandbox Code Playgroud)

这样我首先用空格替换nextline并删除空格.同样,您可以删除其他人.


Bud*_*ddy 10

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("&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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用这个工作正常的课程.