使用map全量替换html代码中图片scr的值

本文介绍如何处理微信公众号的图文素材,包括解析HTML代码获取图片地址,并替换图片URL以适应微信平台的要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:微信公众号保存永久图文素材,图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS,涉及图片url必须来源 "上传图文消息内的图片获取URL"接口获取。外部图片url将被过滤。所以需要将本地图片url替换成微信的url。数据库分别保存替换前后的内容。此处省略微信相关内容

例如有一段html代码:

<p>&nbsp; &nbsp; &nbsp; 故事叙述一名贫穷的年轻混混,名叫<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>&nbsp; &nbsp; &nbsp; &nbsp;而阿拉丁则带回了油灯。正当他母亲要清理油灯的时候,突然间油灯迸发出一个威力更强大的精灵,随时等待主人的使唤。在精灵的帮助下,阿拉丁变得有钱有势,还娶了公主巴德罗巴朵尔。精灵更为阿拉丁建造一座美轮美奂的宫殿,甚至比皇帝的皇宫还要壮丽。

</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());
            }
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值