public static void appendEscapingCDATA(StringBuffer buf,
String str) {
if (str != null) {
int end = str.indexOf(CDATA_END);
if (end < 0) {
buf.append(str);
} else {
int start = 0;
while (end > -1) {
buf.append(str.substring(start, end));
buf.append(CDATA_EMBEDED_END);
start = end + CDATA_END_LEN;
if (start < str.length()) {
end = str.indexOf(CDATA_END, start);
} else {
return;
}
}
buf.append(str.substring(start));
}
}
}
Ensures that embeded CDEnd strings (]]>) are handled properly
within message, NDC and throwable tag text. |
public static String escapeTags(String input) {
//Check if the string is null, zero length or devoid of special characters
// if so, return what was sent in.
if(input == null
|| input.length() == 0
|| (input.indexOf('"") == -1 &&
input.indexOf('&") == -1 &&
input.indexOf('< ") == -1 &&
input.indexOf(' >") == -1)) {
return input;
}
//Use a StringBuffer in lieu of String concatenation -- it is
//much more efficient this way.
StringBuffer buf = new StringBuffer(input.length() + 6);
char ch = ' ";
int len = input.length();
for(int i=0; i < len; i++) {
ch = input.charAt(i);
if (ch > ' >") {
buf.append(ch);
} else if(ch == '< ") {
buf.append("<");
} else if(ch == ' >") {
buf.append(">");
} else if(ch == '&") {
buf.append("&");
} else if(ch == '"") {
buf.append(""");
} else {
buf.append(ch);
}
}
return buf.toString();
}
This method takes a string which may contain HTML tags (ie,
<b>, <table>, etc) and replaces any
'<', '>' , '&' or '"'
characters with respective predefined entity references. |