in impl/src/main/java/org/apache/myfaces/renderkit/html/util/HTMLEncoder.java [92:196]
public static String encode(FacesContext context, String string,
boolean encodeNewline, boolean encodeSubsequentBlanksToNbsp, boolean encodeNonLatin)
{
if (string == null)
{
return "";
}
StringBuilder sb = null; //create later on demand
String app;
char c = ' ';
char prevC;
int length = string.length();
for (int i = 0; i < length; ++i)
{
app = null;
prevC = c;
c = string.charAt(i);
// All characters before letters
if ((int)c < 0x41)
{
switch (c)
{
case '"': app = """; break; //"
case '&': app = "&"; break; //&
case '<': app = "<"; break; //<
case '>': app = ">"; break; //>
case ' ':
if (encodeSubsequentBlanksToNbsp && prevC == ' ')
{
//Space at beginning or after another space
app = " ";
}
break;
case '\n':
if (encodeNewline)
{
app = "<br/>";
}
break;
default:
break;
}
// http://www.w3.org/MarkUp/html3/specialchars.html
// From C0 extension U+0000-U+001F only U+0009, U+000A and
// U+000D are valid control characters
if (c <= 0x1F && c != 0x09 && c != 0x0A && c != 0x0D)
{
// Ignore escape character
app = "";
}
}
else if (encodeNonLatin && (int)c > 0x80)
{
switch(c)
{
//german umlauts
case '\u00E4' : app = "ä"; break;
case '\u00C4' : app = "Ä"; break;
case '\u00F6' : app = "ö"; break;
case '\u00D6' : app = "Ö"; break;
case '\u00FC' : app = "ü"; break;
case '\u00DC' : app = "Ü"; break;
case '\u00DF' : app = "ß"; break;
//misc
//case 0x80: app = "€"; break; sometimes euro symbol is ascii 128, should we support it?
case '\u20AC': app = "€"; break;
case '\u00AB': app = "«"; break;
case '\u00BB': app = "»"; break;
case '\u00A0': app = " "; break;
default :
//encode all non basic latin characters
app = "&#" + ((int)c) + ';';
break;
}
}
if (app != null)
{
if (sb == null)
{
sb = SharedStringBuilder.get(context, SB_ENCODE, string.substring(0, i));
}
sb.append(app);
}
else
{
if (sb != null)
{
sb.append(c);
}
}
}
if (sb == null)
{
return string;
}
else
{
return sb.toString();
}
}