java过滤html标签但是不过滤img标签中src属性值为特定路径的img标签 ゝ一世哀愁。 2022-11-18 04:36 178阅读 0赞 ### **背景**: ### 近期做一个文章管理的模块,里面有个查询文章列表的接口,要求显示文章内容前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);
还没有评论,来说两句吧...