背景:
近期做一个文章管理的模块,里面有个查询文章列表的接口,要求显示文章内容前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("“","\"");
content = content.replaceAll("”","\"");
//空格去掉
content = content.replaceAll(" ","");
if(content.length()>300){
content = content.substring(0,300);
}
System.out.printf("content=" + content);