情景:
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("");
}