Jsoup 替换文本中所有的img src属性
2019独角兽企业重金招聘Python工程师标准>>>
解决思路:在本地展示使用本地的src,发送到微信的时候使用微信的src.要实现功能,先需要做一些工作.
1.在富文本框中上传图片的时候,使用本地图片地址插入到img标签中,并且将微信的src保存到data-src.
<img wxImg-src="weixinurl" src="localurl"/>
2.在提交到后台的时候,使用Jsoup将src中的内容替换为wxImg-src.
/*** 将htmlBody中所有img标签中的src内容替换为原data-src的内容,* <br/>如果不报含data-src,则src的内容不会被替换* <br/>例如: * <br/> 替换前 <img data-src="weixinImgUrl" src="localImgUrl" othreAttr="其他属性不变"/>* <br/> 替换后 <img src="weixinImgUrl" othreAttr="其他属性不变" />* @param htmlBody html内容* @return 返回替换后的内容* @author Leon Tan*/public static String replaceImgSrcFromDataSrc(String htmlBody) {Document document = Jsoup.parseBodyFragment(htmlBody);Elements nodes = document.select("img");int nodeLenth = nodes.size();for (int i = 0; i < nodeLenth; i++) {Element e = nodes.get(i);String dataSrc = e.attr("data-src");if (StringUtils.isNotBlank(dataSrc)){System.out.println(dataSrc);e.attr("src", dataSrc);e.removeAttr("data-src");}}if (htmlBody.contains("<html>")){return document.toString();}else{return document.select("body>*").toString();}}// 测试代码public static void main(String[] args) {String context = "<div>" +" <div>123123123123<p>asdfasdfasdf</p></div>" +" <img data-src=\"http://mmbiz.qpic.cn/mmbiz_jpg/iamNUozwoQLl1Pta8vlKQRJgcZzwzbcpxnNaQ1Xy1eAt90On0SwzVabQPeMXN6ksvrSXVhkpiaAYFC0XesYqFTng/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1\" src=\"http://www.fong.site/pic135editor/50014/7356.jpg\"/>" +" <p><img data-src=\"weixin\" style=\"width:99px;\" src=\"local\"/></p>" +" <p><img src=\"没有data-src\"/></p>" +"</div>";System.out.println(replaceImgSrcFromDataSrc(context));}
3.将最终返回的结果另存到一个新的字段中,这样在本地显示的时候,就获取原字段内容,发送给微信的时候就取新字段内容.
输出
<div> <div>123123123123<p>asdfasdfasdf</p></div> <img src="http://mmbiz.qpic.cn/mmbiz_jpg/iamNUozwoQLl1Pta8vlKQRJgcZzwzbcpxnNaQ1Xy1eAt90On0SwzVabQPeMXN6ksvrSXVhkpiaAYFC0XesYqFTng/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1"> <p><img style="width:99px;" src="weixin"></p> <p><img src="没有data-src"></p>
</div>
///
无关说明
本来第一时间想到的是使用正则表达式来做,但是做出来之后感觉很大局限性.
//通过正则表达式将img标签中的src内容替换为data-src中的内容
/*** 通过正则表达式将img标签中的src内容替换为data-src中的内容* @param context 要替换的内容* @return* @author Leon Tan*/public static String replaceImgSrcFromDataSrc(String context){Pattern p = Pattern.compile("((data-src|src)\\s*=(\"|\')[0-9a-zA-Z:/\\.\\?\\s_\\-=&]*(\"|\'))", Pattern.CASE_INSENSITIVE);Matcher m = p.matcher(context);StringBuffer sb = new StringBuffer(context);String temp = null;int replaceIndex = 0;while (m.find()) {String find = m.group();if (find.indexOf("data-src") > -1){temp = find;}else{if (temp != null){replaceIndex = sb.indexOf(find, replaceIndex);sb.replace(replaceIndex, replaceIndex+find.length(), "src"+temp.substring(8));}}}return sb.toString();}
本文地址:https://my.oschina.net/longfong/blog/819883
转载于:https://my.oschina.net/longfong/blog/819883
Jsoup 替换文本中所有的img src属性相关推荐
- python如何替换文件部分内容_python 实现批量替换文本中的某部分内容
一.介绍 在做YOLOv3项目时,会需要将文本文件中的某部分内容进行批量替换和修改,所以编写了python程序批量替换所有文本文件中特定部分的内容. 二.代码实现 import re import o ...
- python一键替换_python 实现批量替换文本中的某部分内容
一.介绍 在做YOLOv3项目时,会需要将文本文件中的某部分内容进行批量替换和修改,所以编写了python程序批量替换所有文本文件中特定部分的内容. 二.代码实现 import re import o ...
- 富文本上传的内容中img标签的src属性丢失
在一次项目上线后,突然发现后台系统的上传图片功能出了问题.是要发布一篇文章,文章内容是以富文本的形式保存的,上传图片后发现图片显示不出来,看数据库保存的字段发现img标签没有src属性,当时就奇了怪了 ...
- HTML中img标签的src属性为绝对路径时,在IE中图片可显示,在firefox中不行
HTML中img标签的src属性为绝对路径时,在IE中图片可显示,在firefox中不行 下图,src中为图片的绝对路径,此时在IE浏览器中图片可显示出来,firefox浏览器中图片不能显示出来 代码 ...
- java 文本编辑器替换特殊字符_linux中批量替换文本中字符串--转载
(一)通过vi编辑器来替换. vi/vim 中可以使用 :s 命令来替换字符串. :s/well/good/ 替换当前行第一个 well 为 good :s/well/good/g 替换当前行所有 w ...
- 一个正则替换:一段文本中有若干a img标记,替换文本中的某些词,不包含除了a img标记 中的文字、属性...
如: abcd</br> cabcdef <a href="">abcdef</a> <img title="cabcdef&q ...
- 批量替换文本中的多组字符串
[问题] hi friends, I have the following demand and I want to know if you have any suggestions for me: ...
- Excel 2010 VBA 入门 048 批量替换文本中的指定字符(replayce函数和方法)
目录 示例: 实现代码 Replace函数 单元格对象的Replace方法 使用Replace方法实现代码 示例: 如图所示,该表为某公司商品编码.由于商品目录升级,现商品编码中以"GXGY ...
- 使用js替换文本中的换行符
核心语句: 使用正则表达式: txts=txts.replace(/[\n\r]/g,'需替换的内容') 如何用js替换文本里的换行符 \n?
最新文章
- R语言ggplot2可视化:将dataframe和数据列名称传递给函数通过函数进行ggplot2可视化输出
- Oracle SQL 空值排序(Nulls)
- mysql数据库安全配置规范_MySQL数据库安全配置规范操作
- 优先队列(priority_queue)的原理及用法
- hdu2923 最短路floyd
- python django用户登录系统_Django实现用户注册登录
- 关于字符匹配所引起的的问题
- 数据库操作 linq php,.NET_asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析,本文实例讲述了asp.net使用LINQ t - phpStudy...
- js中WINDOW对象
- TCP/IP的全部IP协议号
- C语言程序设计第三版微课版,C语言程序设计(第3版 微课版)
- 帐号 快速看图cad_cad快速看图下载
- mysql 内连接查询三表数据_数据库三表连接查询怎么做
- linux终端命令大全(完善中)
- 电机专题2:直流有刷电机工作原理
- visio双线方框怎么画_用VISIO怎样画出扇形
- 基于堡垒主机概念的运维审计系统
- 从svn拉下的代码无状态图标(绿色对勾)的解决方法
- 聊天机器人之语音识别科大讯飞 Node.js SDK
- java:上传微信临时文件的素材