android TextView加载html 过滤所有标签,保留换行标签

情景:

TextView加载后端接口获取到的html富文本

 

遇到的问题:

客户端通过接口取到的数据如下:

<p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; 

用 TextView 的 Html.fromHtml 解析后很多标签都无法解析,以文案的形式显示出来了

 

问题分析及解决:

1、因html保存数据时为了避免XSS攻击,将html数据进行了转义,所以获取的数据不是以<> 这种html的格式出现,

      转义规则参考: http://tool.oschina.net/commons?type=2,

转义后的

2、TextView加载时,先用   Html.fromHtml  进行转化为正常的html标签,

<p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; color: rgb(51, 51, 51); 

但因为TextView支持的标签很少,导致显示有问题

3、用正则表达式过滤掉所有标签,只保留换行标签,如下:

private String getHTMLStr(String htmlStr){

        //先将换行符保留,然后过滤标签
        Pattern p_enter = Pattern.compile("<br/>", Pattern.CASE_INSENSITIVE);
        Matcher m_enter = p_enter.matcher(htmlStr);
        htmlStr = m_enter.replaceAll("\n");

        //过滤html标签
        Pattern p_html = Pattern.compile("<[^>]+>", Pattern.CASE_INSENSITIVE);
        Matcher m_html = p_html.matcher(htmlStr);
        return  m_html.replaceAll("");
    }

  

 

posted @ 2019-02-21 16:24  你好and程序员  阅读(4015)  评论(0编辑  收藏  举报