in wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java [291:386]
public static CharSequence escapeMarkup(final CharSequence s, final boolean escapeSpaces,
final boolean convertToHtmlUnicodeEscapes)
{
if (s == null)
{
return null;
}
final int len = s.length();
if (len == 0)
{
return s;
}
final AppendingStringBuffer buffer = new AppendingStringBuffer((int)(len * 1.1));
for (int i = 0; i < len; i++)
{
final char c = s.charAt(i);
if (Character.getType(c) == Character.UNASSIGNED)
{
continue;
}
switch (c)
{
case '\t' :
if (escapeSpaces)
{
// Assumption is four space tabs (sorry, but that's
// just how it is!)
buffer.append(" ");
}
else
{
buffer.append(c);
}
break;
case ' ' :
if (escapeSpaces)
{
buffer.append(" ");
}
else
{
buffer.append(c);
}
break;
case '<' :
buffer.append("<");
break;
case '>' :
buffer.append(">");
break;
case '&' :
buffer.append("&");
break;
case '"' :
buffer.append(""");
break;
case '\'' :
buffer.append("'");
break;
default :
int ci = 0xffff & c;
if (
// if this is non-printable and not whitespace (TAB, LF, CR)
((ci < 32) && (ci != 9) && (ci != 10) && (ci != 13)) ||
// or non-ASCII (XXX: why 160+ ?!) and need to UNICODE escape it
(convertToHtmlUnicodeEscapes && (ci > 159)))
{
buffer.append("&#");
buffer.append(Integer.toString(ci));
buffer.append(';');
}
else
{
// ASCII or whitespace
buffer.append(c);
}
break;
}
}
return buffer;
}