// 將href外站的連接換爲302跳轉 public static String formatA(String src, String patternStr, String replace) { if (StringUtil.isBlank(src) || StringUtil.isBlank(patternStr) || StringUtil.isBlank(replace)) { return src; } // html的標籤屬性確定是以單引號或雙引號包含 Pattern p = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(src); 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(replace, 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'>"; src = src.replace(a, _a); } return src; } // 將添加的連接去除 public static String formatABackUp(String src, String patternStr) { if (StringUtil.isBlank(src) || StringUtil.isBlank(patternStr)) { return src; } // html的標籤屬性確定是以單引號或雙引號包含 Pattern p = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(src); 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 = URLDecoder.decode(_url, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //https://tj422637.onloon.co/callback/mail/trace/hit?messageID=mid:4191b2fd09274c4ba4e6811c26dc95c4&extMessageID=extmid:21147d3a3cb14687afb9b48e28f6f879&redirect_url=https%3A%2F%2Fwww.baidu.com%2F // url = String.format(replace, url); url = url.substring(url.indexOf("redirect_url=") + 13); // 將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 + ">"; src = src.replace(a, _a); } return src; }
public static void main(String[] args) { String replace = "http://trace" + "?messageID=" + "123"; if (StringUtil.isNotBlank("456")) { replace += "&extMessageID=" + "456"; } replace += "&redirect_url=%s"; String src = "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"#fff\" style=\"text-align: left\"><tbody><tr><td valign=\"top\" style=\"width:100%;\"><p style=\"font-size:18px;line-height:30px;text-align:justify;\">本週五務必上線,<a href=\"http://www.baidu.com\">若有問題</a>,及時通知!</p></td></tr><tr height=\"20\"></tr></tbody></table>"; //添加連接 src = formatA(src, A_HREF_URL, replace); System.out.println(src); //去除連接 src = formatABackUp(src, A_HREF_URL); System.out.println(src); }
<table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#fff" style="text-align: left"><tbody><tr><td valign="top" style="width:100%;"><p style="font-size:18px;line-height:30px;text-align:justify;">本週五務必上線,<a href='http://trace?messageID=123&extMessageID=456&redirect_url=http%3A%2F%2Fwww.baidu.com' target='_blank'>若有問題</a>,及時通知!</p></td></tr><tr height="20"></tr></tbody></table> <table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#fff" style="text-align: left"><tbody><tr><td valign="top" style="width:100%;"><p style="font-size:18px;line-height:30px;text-align:justify;">本週五務必上線,<a href='http://www.baidu.com' target='_blank'>若有問題</a>,及時通知!</p></td></tr><tr height="20"></tr></tbody></table>