Existe-t-il un moyen de convertir une chaîne en une chaîne qui s'affichera correctement dans un document Web? Par exemple, changer la chaîne
"<Hello>"
À
"<Hello>"
StringEscapeUtils
a des fonctions conçues exactement pour cela:
C'est ce qu'on appelle généralement "échappement HTML". Je ne suis au courant de rien dans les bibliothèques standard pour cela (bien que vous puissiez l'approcher en utilisant l'échappement XML). Cependant, de nombreuses bibliothèques tierces peuvent le faire. StringEscapeUtils from org.Apache.commons.lang a une méthode escapeHtml
qui peut le faire.
public static String stringToHTMLString(String string) {
StringBuffer sb = new StringBuffer(string.length());
// true if last char was blank
boolean lastWasBlankChar = false;
int len = string.length();
char c;
for (int i = 0; i < len; i++)
{
c = string.charAt(i);
if (c == ' ') {
// blank gets extra work,
// this solves the problem you get if you replace all
// blanks with , if you do that you loss
// Word breaking
if (lastWasBlankChar) {
lastWasBlankChar = false;
sb.append(" ");
}
else {
lastWasBlankChar = true;
sb.append(' ');
}
}
else {
lastWasBlankChar = false;
//
// HTML Special Chars
if (c == '"')
sb.append(""");
else if (c == '&')
sb.append("&");
else if (c == '<')
sb.append("<");
else if (c == '>')
sb.append(">");
else if (c == '\n')
// Handle Newline
sb.append("<br/>");
else {
int ci = 0xffff & c;
if (ci < 160 )
// nothing special only 7 Bit
sb.append(c);
else {
// Not 7 Bit use the unicode system
sb.append("&#");
sb.append(new Integer(ci).toString());
sb.append(';');
}
}
}
}
return sb.toString();
}
HTMLEntities est une classe Java Open Source contenant une collection de méthodes statiques (htmlentities, unhtmlentities, ...) permettant de convertir des caractères spéciaux et étendus en entités HTML et inversement.
http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=htmlentities
Mieux vaut le faire vous-même, si vous connaissez la logique derrière - c'est facile:
public class ConvertToHTMLcode {
public static void main(String[] args) throws IOException {
String specialSymbols = "ễ%ß Straße";
System.out.println(convertToHTMLCodes(specialSymbols)); //ễ%ß
}
public static String convertToHTMLCodes(String str) throws IOException {
StringBuilder sb = new StringBuilder();
int len = str.length();
for(int i = 0; i < len; ++i) {
char c = str.charAt(i);
if (c > 127) {
sb.append("&#");
sb.append(Integer.toString(c, 10));
sb.append(";");
} else {
sb.append(c);
}
}
return sb.toString();
}
}