对html文件的一些常用操作

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


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值