使用Jsoup过滤HTML标签,获取纯文本

简介: 使用Jsoup过滤HTML标签,获取纯文本

通常情况下,把HTML富文本内容保存到数据库字段时,会自带一些HTML标签,然后将这些内容再次显示到网页上时,就能够保持文本在富文本中编辑时的HTML格式。


这种做法毫无疑问是没有问题的,但有的时候,我们需要将HTML标签去掉,只取纯文本内容。这个时候,该怎么做呢?


比如说有这样一段简单的HTML富文本内容,带有p标签(它表示p标签内部的文本是一个段落),但有的时候,我们在显示该内容的缩略文本时,并不需要p标签,也就是说,只想显示“你好呀,沉默王二,请坚持写作!”


注:通常情况下,HTML文本内容要比只有p标签这个复杂!


<p>你好呀,沉默王二,请坚持写作!</p>

1

假如要你来实现这个需求,你能想到的解决办法是什么呢?


1)存入数据库时,既存入<p>你好呀,沉默王二,请坚持写作!</p>,也存入你好呀,沉默王二,请坚持写作!在取的时候按需索取。


2)存入数据库时,只存入<p>你好呀,沉默王二,请坚持写作!</p>,在显示的时候,如果需要p标签,就不过滤p标签;如果不需要p标签,就通过一定的方法过滤掉p标签。过滤的时机有三处,其一是从数据库取数据时通过SQL过滤(但这会增加数据库压力);其二是在服务器端向客户端返回数据时过滤掉HTML标签,再回传给客户端;其三是在view视图呈现时调用formatter进行过滤,我认为这种方法也是最好的。


第一种方案的解决办法, 比如说使用UEditor,如下图。


image.png


使用UEditor富文本编辑器的话,可以直接通过UEditor提供的两个API将带有HTML标签的内容和没有HTML标签的纯文本内容获取到。


第二种方案的解决办法,通过SQL过滤的方法我暂时还不会,另外它不是最优的解决方案。


第二、第三的区别在于契机不同,但服务器端过滤HTML标签的方法其实是一样的。


首先告诉大家的解决方案是使用jsoup!


官网地址为:https://jsoup.org/


如果是传统项目的话,在「getting started」处下载jar包添加到项目构建路径下;

如果是Maven 构建项目的话,把一下内容粘贴到pom.xml 文件的依赖节点下。


<dependency>

 <!-- jsoup HTML parser library @ https://jsoup.org/ -->

 <groupId>org.jsoup</groupId>

 <artifactId>jsoup</artifactId>

 <version>1.11.2</version>

</dependency>


原HTML富文本内容和使用jsoup过滤后的结果如下图所示:


image.png


具体代码实现非常简单,只有一行代码:


System.out.println(Jsoup.parse(unsafe).text());

1

使用jsoup过滤的结果是100%的纯文本。而使用一般使用正则表达式去HTML的做法在一定情况并不能保证是绝对的纯文本。


public static String replaceHtml(String html) {

if (isBlank(html)){

 return "";

}

String regEx = "<.+?>";

Pattern p = Pattern.compile(regEx);

Matcher m = p.matcher(html);

String s = m.replaceAll("");

return s;

}


如果想使用formatter,请参照JSP标签库Taglib之自定义function篇,轻松实现日期格式化。


最近,有不少读者问我是怎么学习的,那我干脆就把我看过的一些优质书籍贡献出来:


计算机基础入门推荐:《程序是怎样跑起来的》、《网络是怎样连接的》、《计算机是怎样跑起来的的》


进一步认识计算机网络:《计算机网络:自顶向下》、《图解http》


数据结构+算法入门:《大话数据结构》、《阿哈算法》


算法进阶:《算法第四版》、《编程珠玑》


由于我是 Java 技术栈的,顺便推荐几本 Java 的书籍,从左到由的顺序看到


Java:《Java核心技术卷1》、《编程思想》、《深入理解Java虚拟机》、《effective Java》、《Java并发编程的艺术》


数据库:《mysql必知必会》、《MySQL技术内幕:InnoDB存储引擎》


就先介绍这么多,这些都是最基础最核心的,希望对那些不知道看什么书的同学有所帮助。


相关文章
|
2月前
|
移动开发 HTML5
HTML5标签的类型
HTML5标签的类型。
57 5
|
24天前
|
移动开发 编解码 UED
除了 `<audio>` 和 `<video>` 标签,HTML5 还支持哪些多媒体格式?
【10月更文挑战第19天】HTML5对多种多媒体格式的支持,为网页开发者提供了丰富的选择,能够更好地满足不同类型多媒体内容在网页中的展示和交互需求,提升了网页的用户体验和多媒体应用的多样性。
|
28天前
|
XML JavaScript 前端开发
如何解析一个 HTML 文本
【10月更文挑战第23天】在实际应用中,根据具体的需求和场景,我们可以灵活选择解析方法,并结合其他相关技术来实现高效、准确的 HTML 解析。随着网页技术的不断发展,解析 HTML 文本的方法也在不断更新和完善,
|
2月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
474 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
24天前
|
存储 移动开发 前端开发
|
2月前
|
前端开发
【HTML】img标签和超链接标签
【HTML】img标签和超链接标签
43 2
|
2月前
|
移动开发 前端开发 JavaScript
【HTML】HTML页面和常见标签
【HTML】HTML页面和常见标签
36 1
|
3月前
|
前端开发
前端基础(二)_HTML常用标签(块级标签、行级标签、行块级标签)
本文详细介绍了HTML中的常用标签,包括块级标签(如`h1`至`h6`、`p`、`div`等)、行级标签(如`span`、`b`、`strong`、`i`、`em`、`sub`、`sup`、`del`、`a`等),以及行块级标签(如`img`)。文章解释了这些标签的用途、特点和基本用法,并通过示例代码展示了如何在HTML文档中使用它们。
126 1
|
3月前
|
移动开发 开发者 UED
HTML5中video标签controlslist属性的使用方法
`controlsList`属性为开发者提供了更多控制HTML5视频播放器行为的能力,让视频内容的集成更加灵活和符合需求。通过精心设计的控制列表,可以提升用户体验,同时保持内容的安全性和专业性。这种细节的控制和定制能力是现代Web开发的一个重要方面,反映了HTML5对开发者和内容创作者需求的响应。
267 1
|
3月前
|
XML 数据格式 Python
Python技巧:将HTML实体代码转换为文本的方法
在选择方法时,考虑到实际的应用场景和需求是很重要的。通常,使用标准库的 `html`模块就足以满足大多数基本需求。对于复杂的HTML文档处理,则可能需要 `BeautifulSoup`。而在特殊场合,或者为了最大限度的控制和定制化,可以考虑正则表达式。
69 12