java过滤html标签但是不过滤img标签中src属性值为特定路径的img标签

背景

近期做一个文章管理的模块,里面有个查询文章列表的接口,要求显示文章内容前300个字。由于文章内容可能包含多张图片,附件等。所以在数据库中文章内容存的是blob格式。前端是把文章的html格式传给后台,由后台整体存到blob中

如果用户在录入文章内容时,录入了前端编辑器【我们采用tinymce编辑器】提供的表情符号时,该编辑器也把表情符号转换成了 img标签。只不过src路径前部分是固定的。

要求

后台返回文章内容前300字是过滤了html标签的纯文字,比如<p> <a> <img>等标签替换成空了。但是表情符号不要过滤,前300字中如果有表情符号就显示表情符号,其他图片必须过滤。

解决办法

利用正则把文章内容的html标签替换成空,但是不能替换特定img表情符,然后剩余存文字取前300即可。

//content是文章内容的html
//static/tinymce4.7.5/plugins/img/01.gif  是表情符路径,所有表情符号前面路径都一样,
//只有名字不一样
//正则:(?!<(img|IMG) src=\"static/tinymce4.7.5/plugins/img/.*?/>)<.*?>
content = content.replaceAll("(?!<(img|IMG) src=\"static/tinymce4.7.5/plugins/img/.*?/>)<.*?>","");

//过滤tab符号、回车、换行html
content = content.replaceAll("\t|\n|\r","");

//双引号替换为“”
content = content.replaceAll("&ldquo;","\"");
content = content.replaceAll("&rdquo;","\"");

//空格去掉
content = content.replaceAll("&nbsp;","");

if(content.length()>300){
    content = content.substring(0,300);
}
System.out.printf("content=" + content);

猜你喜欢

转载自blog.csdn.net/dhklsl/article/details/115620016
今日推荐