/**
*
*/
package com.cms21.mobilecrm.utils;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.UUID;
import org.apache.commons.codec.binary.Base64;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.safety.Whitelist;
import org.jsoup.select.Elements;
/**
* @author matthieu
*
*/
public class HtmlUtils {
/**
* 在原有html的<body>元素后插入新的html代码
*
* @param html
* 原有的HTML字符串
*
* @param prepends
* 追加的HTML字符串
*
* @return 合并后的新HTML字符串
*/
public static String prependBody(String html, String... prepends) {
Document doc = Jsoup.parse(html);
Element body = doc.body();
for (String prepend : prepends) {
body.prepend(prepend);
}
return doc.outerHtml();
}
/**
* 在原有html的</body>元素前插入新的html代码
*
* @param html
* 原有的HTML字符串
*
* @param appends
* 追加的HTML字符串
*
* @return 合并后的新HTML字符串
*/
public static String appendBody(String html, String... appends) {
Document doc = Jsoup.parse(html);
Element body = doc.body();
for (String append : appends) {
body.append(append);
}
return doc.outerHtml();
}
/**
* 在原有html的</body>元素前以及<body>后插入新的html代码
*
* @param html
* 原有的HTML字符串
*
*
* @param prepends
* 追加的HTML字符串
*
*
* @param appends
* 追加的HTML字符串
*
*
* @return 合并后的新HTML字符串
*/
public static String wrapBody(String html, String[] prepends,
String[] appends) {
Document doc = Jsoup.parse(html);
Element body = doc.body();
for (String prepend : prepends) {
body.prepend(prepend);
}
for (String append : appends) {
body.append(append);
}
return doc.outerHtml();
}
/**
* 针对可能包含代码的html字符串进行过滤
*
* @param unsafe
* 待过滤的HTML字符串
*
* @return 过滤后的HTML字符串
*/
public static String cleanUnsafe(String unsafe) {
return Jsoup.clean(unsafe, Whitelist.relaxed());
}
/**
* 使用Base64编码原有html中a标签的href属性,并将其作为指定url的参数
*
* @param html
* html字符串
*
* @param url
* 指定的url地址
* @return 替换完成后的html字符串
*/
public static String replaceHref(String html, String url) {
Document doc = Jsoup.parse(html);
Elements links = doc.select("a[href]");
for (Element link : links) {
String value = link.attr("abs:href");
try {
// 把href中的url解码(url中没有encode也没有关系,只是为了处理中文被encode的情况)
value = decodeChineseInUrl(value);
// 再encode URL
value = encodeChineseInUrl(value);
String base64 = new String(Base64.encodeBase64(value
.getBytes("UTF-8")));
// 再对base64后的内容进行URLEncoder
base64 = URLEncoder.encode(base64, "UTF-8");
link.attr("href", url + base64 + "&serial_no="
+ UUID.randomUUID().toString().replaceAll("-", ""));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return doc.outerHtml();
}
/**
* 使用Base64编码原有html中img标签的src属性,并将其作为指定url的参数
*
* @param html
* html字符串
*
* @param url
* 指定的url地址
* @return 替换完成后的html字符串
*/
public static String replaceImg(String html, String url) {
Document doc = Jsoup.parse(html);
Elements links = doc.select("img[src]");
for (Element link : links) {
String value = link.attr("src");
// 再encode URL
value = encodeChineseInUrl(value);
if (!(value.startsWith("http://") || value.startsWith("HTTP://")
|| value.startsWith("www.") || value.startsWith("WWW.")))
link.attr("src", url + "/" + value);
}
return doc.outerHtml();
}
// 把url中的正常的中文转换为%形式的中文
public static String encodeChineseInUrl(String srcUrl) {
String srouce = null;
try {
srouce = URLEncoder.encode(srcUrl.toString(), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
srouce = srouce.replace("%2F", "/");
srouce = srouce.replace("%3A", ":");
return srouce;
}
// 把url中的%形式的中文解码为正常的中文
public static String decodeChineseInUrl(String url) {
String decodeUrl = url;
try {
decodeUrl = URLDecoder.decode(url, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return decodeUrl;
}
public static void main(String[] args) {
System.out.println();
}
}
*
*/
package com.cms21.mobilecrm.utils;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.UUID;
import org.apache.commons.codec.binary.Base64;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.safety.Whitelist;
import org.jsoup.select.Elements;
/**
* @author matthieu
*
*/
public class HtmlUtils {
/**
* 在原有html的<body>元素后插入新的html代码
*
* @param html
* 原有的HTML字符串
*
* @param prepends
* 追加的HTML字符串
*
* @return 合并后的新HTML字符串
*/
public static String prependBody(String html, String... prepends) {
Document doc = Jsoup.parse(html);
Element body = doc.body();
for (String prepend : prepends) {
body.prepend(prepend);
}
return doc.outerHtml();
}
/**
* 在原有html的</body>元素前插入新的html代码
*
* @param html
* 原有的HTML字符串
*
* @param appends
* 追加的HTML字符串
*
* @return 合并后的新HTML字符串
*/
public static String appendBody(String html, String... appends) {
Document doc = Jsoup.parse(html);
Element body = doc.body();
for (String append : appends) {
body.append(append);
}
return doc.outerHtml();
}
/**
* 在原有html的</body>元素前以及<body>后插入新的html代码
*
* @param html
* 原有的HTML字符串
*
*
* @param prepends
* 追加的HTML字符串
*
*
* @param appends
* 追加的HTML字符串
*
*
* @return 合并后的新HTML字符串
*/
public static String wrapBody(String html, String[] prepends,
String[] appends) {
Document doc = Jsoup.parse(html);
Element body = doc.body();
for (String prepend : prepends) {
body.prepend(prepend);
}
for (String append : appends) {
body.append(append);
}
return doc.outerHtml();
}
/**
* 针对可能包含代码的html字符串进行过滤
*
* @param unsafe
* 待过滤的HTML字符串
*
* @return 过滤后的HTML字符串
*/
public static String cleanUnsafe(String unsafe) {
return Jsoup.clean(unsafe, Whitelist.relaxed());
}
/**
* 使用Base64编码原有html中a标签的href属性,并将其作为指定url的参数
*
* @param html
* html字符串
*
* @param url
* 指定的url地址
* @return 替换完成后的html字符串
*/
public static String replaceHref(String html, String url) {
Document doc = Jsoup.parse(html);
Elements links = doc.select("a[href]");
for (Element link : links) {
String value = link.attr("abs:href");
try {
// 把href中的url解码(url中没有encode也没有关系,只是为了处理中文被encode的情况)
value = decodeChineseInUrl(value);
// 再encode URL
value = encodeChineseInUrl(value);
String base64 = new String(Base64.encodeBase64(value
.getBytes("UTF-8")));
// 再对base64后的内容进行URLEncoder
base64 = URLEncoder.encode(base64, "UTF-8");
link.attr("href", url + base64 + "&serial_no="
+ UUID.randomUUID().toString().replaceAll("-", ""));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return doc.outerHtml();
}
/**
* 使用Base64编码原有html中img标签的src属性,并将其作为指定url的参数
*
* @param html
* html字符串
*
* @param url
* 指定的url地址
* @return 替换完成后的html字符串
*/
public static String replaceImg(String html, String url) {
Document doc = Jsoup.parse(html);
Elements links = doc.select("img[src]");
for (Element link : links) {
String value = link.attr("src");
// 再encode URL
value = encodeChineseInUrl(value);
if (!(value.startsWith("http://") || value.startsWith("HTTP://")
|| value.startsWith("www.") || value.startsWith("WWW.")))
link.attr("src", url + "/" + value);
}
return doc.outerHtml();
}
// 把url中的正常的中文转换为%形式的中文
public static String encodeChineseInUrl(String srcUrl) {
String srouce = null;
try {
srouce = URLEncoder.encode(srcUrl.toString(), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
srouce = srouce.replace("%2F", "/");
srouce = srouce.replace("%3A", ":");
return srouce;
}
// 把url中的%形式的中文解码为正常的中文
public static String decodeChineseInUrl(String url) {
String decodeUrl = url;
try {
decodeUrl = URLDecoder.decode(url, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return decodeUrl;
}
public static void main(String[] args) {
System.out.println();
}
}