首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Android中剥离或转义html标签

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

Stack Overflow用户
提问于 2011-06-28 14:58:30
回答 7查看 61.2K关注 0票数 83

PHP有一个strip_tags函数,可以从字符串中剥离HTML和PHP标签。

Android有办法摆脱html吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-09-12 22:44:00

由@sparkymat链接到的答案中的解决方案通常需要正则表达式-这是一种容易出错的方法-或者安装第三方库,如jsoupjericho。在安卓设备上,一个更好的解决方案是使用Html.fromHtml()函数:

代码语言:javascript
复制
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标签的输入html的Spanned表示。然后,通过将输出转换回字符串来剥离"Span“标记。

正如here所讨论的,从Android N开始,Html.fromHtml的行为已经发生了变化。有关更多信息,请参阅documentation

票数 244
EN

Stack Overflow用户

发布于 2015-09-17 08:33:16

如果您的目标API16或更高版本,您也可以选择使用Html.escapeHtml(String)

对于同样针对API16以下的应用程序,您可以通过调用我从Html.escapeHtml(String)源代码中提取的HtmlUtils.escapeHtml(String)来代替使用下面的类。

代码语言:javascript
复制
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);
            }
        }
    }
}

我正在使用这个类,它工作得很好。

票数 12
EN

Stack Overflow用户

发布于 2017-01-26 14:30:33

这是用于新方法替代(16+接口):

代码语言:javascript
复制
android.text.Html.escapeHtml(your_html).toString();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6502759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档