博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jsoup 替换文本中所有的img src属性
阅读量:6324 次
发布时间:2019-06-22

本文共 2344 字,大约阅读时间需要 7 分钟。

hot3.png

解决思路:在本地展示使用本地的src,发送到微信的时候使用微信的src.要实现功能,先需要做一些工作.

    1.在富文本框中上传图片的时候,使用本地图片地址插入到img标签中,并且将微信的src保存到data-src.

    2.在提交到后台的时候,使用Jsoup将src中的内容替换为wxImg-src.

/**	 * 将htmlBody中所有img标签中的src内容替换为原data-src的内容,	 * 
如果不报含data-src,则src的内容不会被替换 *
例如: *
替换前 <img data-src="weixinImgUrl" src="localImgUrl" othreAttr="其他属性不变"/> *
替换后 <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("")){ return document.toString(); }else{ return document.select("body>*").toString(); } } // 测试代码 public static void main(String[] args) { String context = "
" + "
123123123123

asdfasdfasdf

" + "
" + "

" + "

" + "
"; System.out.println(replaceImgSrcFromDataSrc(context)); }

    3.将最终返回的结果另存到一个新的字段中,这样在本地显示的时候,就获取原字段内容,发送给微信的时候就取新字段内容.

    输出

    

123123123123

asdfasdfasdf

///

无关说明

    本来第一时间想到的是使用正则表达式来做,但是做出来之后感觉很大局限性.

    //通过正则表达式将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

你可能感兴趣的文章
乐视网今日股票开盘大涨,5分钟密集成交2亿!
查看>>
软件可以流氓到什么程度?从卸载步骤就可以看出来!
查看>>
陌陌偿还3亿美元贷款 还发行7.25亿美元债券
查看>>
荣耀总裁赵明:需求远超预期 荣耀V20发货量将超百万
查看>>
中国民航首条“自助智能安检通道”在广州启用
查看>>
辽宁推进个体工商户转型 完成“个转企”超过1万户
查看>>
「每天一道面试题」JVM垃圾回收算法有哪几些?
查看>>
猫眼今日在香港公开招股 定价区间14.8港元至20.4港元
查看>>
“熊孩子”连续脚踢乘客遭背摔暴打,面对熊孩子我们应该怎么做
查看>>
从单机到2000万QPS:知乎Redis平台发展与演进之路
查看>>
design pattens - adapter
查看>>
百度首次将强化学习写入财报,不只是因为它能让你多看广告
查看>>
HTML5中手势原理分析与数学知识的实践
查看>>
[译] 用 CSS 选择器和自定义属性来升级你的项目
查看>>
Zepto源码学习Event模块
查看>>
Android fragment 标签加载过程分析
查看>>
LeetCode40.组合总和|| JavaScript
查看>>
JavaScript深拷贝、浅拷贝
查看>>
[]为false,!![]为true,[true] == 'true'为true,傻傻分不清
查看>>
【译】Gradle 的依赖关系处理不当,可能导致你编译异常
查看>>