需求:微信公众号保存永久图文素材,图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS,涉及图片url必须来源 "上传图文消息内的图片获取URL"接口获取。外部图片url将被过滤。所以需要将本地图片url替换成微信的url。数据库分别保存替换前后的内容。此处省略微信相关内容
例如有一段html代码:
<p> 故事叙述一名贫穷的年轻混混,名叫<em>阿拉丁</em>。他住在中国西部,后来受一名来自马格里布的魔法师之邀(他冒充为<em>阿拉丁</em>的叔叔),前往一个设有陷阱的洞穴中拿取一只神奇的油灯。魔法师正要进一步利用<em>阿拉丁</em>的时候,<em>阿拉丁</em>发现他被困在洞穴里。幸运的是,<em>阿拉丁</em>还留着魔法师借给他的一只魔戒。<em>阿拉丁</em>绝望地摩擦双手,正巧擦到了戒指,迸发出一个精灵。这个精灵还带他返家...
</p><p><img src="D:/res\imagemater\50a1774011ae435eaa15aa9dde994d65.jpg" style="max-width:100%;"></p><p> 而阿拉丁则带回了油灯。正当他母亲要清理油灯的时候,突然间油灯迸发出一个威力更强大的精灵,随时等待主人的使唤。在精灵的帮助下,阿拉丁变得有钱有势,还娶了公主巴德罗巴朵尔。精灵更为阿拉丁建造一座美轮美奂的宫殿,甚至比皇帝的皇宫还要壮丽。
</p><p><img src="D:/res\imagemater\90dabba5e14d49158d8dbed44babb7f8.png" style="max-width:100%;"></p>
第一步:获取该段html中所有src的标签
- /**
- * 解析html代码,获取图片的地址集合
- */
- private static Map<String, String> getImages(String localContent)
- {
- Map<String, String> imgUrls = new HashMap<>();
- String img = "";
- String regEx_img = "(<img.*src\\s*=\\s*(.*?)[^>]*?>)";
- Pattern p_image = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE);
- Matcher m_image = p_image.matcher(localContent);
- while (m_image.find())
- {
- img = m_image.group();
- Matcher m = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(img);
- while (m.find())
- {
- imgUrls.put(m.group(1), "");
- }
- }
- return imgUrls;
- }
第二步:找到每个src所在位置替换新的值
- Map<String, String> images = getImages(localContent);
- Iterator<String> keys = images.keySet().iterator();
- while (keys.hasNext())
- {
- key = keys.next();
- images.put(key, 新的值);
- }
- if (MapUtils.isNotEmpty(images))
- {
- entrys = images.entrySet().iterator();
- while (entrys.hasNext())
- {
- entry = entrys.next();
- // 置换后的内容
- localContent = localContent.replace(entry.getKey(), entry.getValue());
- }
- }
联系客服