public class HtmlUtils {
public static Map<String,Character> map = new HashMap<>(4);
// public static String[] characterToEntityReferenceMap = new String[4];
static {
map.put("lt",'<');
map.put("gt",'>');
map.put("amp",'&');
map.put("quot",'"');
}
public static String htmlEncode(String source) {
if (source == null) {
return "";
}
String html = "";
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < source.length(); i++) {
char c = source.charAt(i);
switch (c) {
case '<':
buffer.append("<");
break;
case '>':
buffer.append(">");
break;
case '&':
buffer.append("&");
break;
case '"':
buffer.append(""");
break;
case 10:
case 13:
break;
default:
buffer.append(c);
}
}
html = buffer.toString();
return html;
}
public static String htmlUnescape(String originalMessage){
int currentPosition = 0;
int nextPotentialPosition = -1;
int nextSemicolonPosition = -2;
StringBuilder decodedMessage = new StringBuilder(originalMessage.length()*2);
while (currentPosition < originalMessage.length()){
nextPotentialPosition = Math.max(currentPosition,nextSemicolonPosition - 10);
do {
nextPotentialPosition = originalMessage.indexOf(38,nextPotentialPosition);
if (nextSemicolonPosition < nextPotentialPosition && nextSemicolonPosition != -1){
nextSemicolonPosition = originalMessage.indexOf(59,nextPotentialPosition);
}
boolean isPotentialReference = nextPotentialPosition != -1 && nextSemicolonPosition != -1 && nextSemicolonPosition - nextPotentialPosition < 10;
if (isPotentialReference || nextPotentialPosition == -1) {
break;
}
if (nextSemicolonPosition == -1){
nextPotentialPosition = -1;
break;
}
nextPotentialPosition++;
}while (nextPotentialPosition != -1);
if (currentPosition != nextPotentialPosition) {
int drop = nextPotentialPosition != -1 ? nextPotentialPosition : originalMessage.length() ;
if (drop - currentPosition > 0){
decodedMessage.append(originalMessage.substring(currentPosition,drop));
currentPosition = drop;
} else {
while (currentPosition < originalMessage.length()) {
decodedMessage.append(originalMessage.charAt(currentPosition));
}
}
}
if (nextPotentialPosition != -1){
String reference = originalMessage.substring(nextPotentialPosition+1,nextSemicolonPosition);
char temp = map.get(reference);
if (temp != '\uffff'){
decodedMessage.append(temp);
currentPosition = nextSemicolonPosition + 1;
} else {
decodedMessage.append(originalMessage.charAt(currentPosition));
currentPosition ++;
}
}
}
return decodedMessage.toString();
}
}
简单的自定义HtmlUtils
最新推荐文章于 2021-06-29 00:21:18 发布