最代码官方的gravatar头像
最代码官方 2016-07-19 13:42:14

一段很实用的替换html字符串中所有A标签属性href为网站跳转链接的java正则代码

最近为了优化seo,将站内所有外站的链接都替换为http://www.zuidaima.com/link.htm?url=http%3A%2F%2Fwww.baidu.com等的链接。所以经过n次测试编写如下方法:

比如原html:

<a href="http://stackoverflow.com/questions/10509699/must-issue-a-starttls-command-first" target="_blank">http://stackoverflow.com/questions/10509699/must-issue-a-starttls-command-first</a>

替换为:

<a href="http://www.zuidaima.com/link.htm?url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F10509699%2Fmust-issue-a-starttls-command-first" target="_blank">http://stackoverflow.com/questions/10509699/must-issue-a-starttls-command-first</a>

 //将href外站的链接换为302跳转
    public static String formatA(String value) {
        if (value == null)
            throw new NullArgumentException("html input");
        //html的标签属性肯定是以单引号或双引号包含
        String pattern = "<a([\\w\\W]*?) href=['|\"]([\\w\\W]*?)['|\"]([\\w\\W]*?)>";
        Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(value);
        while (m.find()) {
            String a = m.group();
            //本站内部链接不处理
            if (a.contains("javaniu")
                    || a.contains("zuidaima") || a.contains("javascript:void")
                    || a.matches("href=['|\"]?\\/")) {
                continue;
            }
            String _url = m.group(2);
            String url = _url;

            try {
                url = URLEncoder.encode(_url, "utf-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            url = String.format(GlobalConstants.URL_LINK, url);
//将target属性替换为"",以便所有外链都是_blank打开
            String targetReg = "target=['|\"].*?['|\"']";
            String prefix = m.group(1).replaceAll(targetReg, "");
            String suffix = m.group(3).replaceAll(targetReg, "");
            //整段匹配不会出现错误
            String _a = "<a" + prefix + " href='" + url + "'" + suffix + " target='_blank'>";
            value = value.replace(a, _a);
        }
        return value;
    }

其中

public static final String URL_LINK = DOMAIN + "link.htm?url=%s";

是最代码线上已经成功测试并运行的代码片段,牛牛们可以参考下


打赏

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友