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îneComment faire pour échapper des caractères spéciaux HTML dans Java?
"<Hello>"
Pour
"<Hello>"
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îneComment faire pour échapper des caractères spéciaux HTML dans Java?
"<Hello>"
Pour
"<Hello>"
StringEscapeUtils
a des fonctions conçues exactement pour cela:
Ce qu'on appelle habituellement "HTML échapper". Je ne suis pas au courant de quoi que ce soit dans les bibliothèques standard pour le faire (même si vous pouvez l'approximer en utilisant l'échappement XML). Cependant, il y a beaucoup de bibliothèques tierces qui peuvent le faire. StringEscapeUtils de 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();
}
Les caractères supplémentaires Unicode sont codés sous la forme 2 caractères dans une chaîne et cela ne sera pas rendu correctement. Pour soutenir vraiment unicode, vous devez gérer les points de code, pas les caractères. – Jakub
Hey je sais que c'est un vieux q mais je me demandais - pourquoi la méthode String.replaceAll() ne fonctionnerait pas au lieu de passer par les caractères un par un? –
HtmlEntities est une classe Open Source Java qui contient une collection de méthodes statiques (htmlentities, unhtmlentities, ...) pour convertir des caractères spéciaux et étendus en HTML entitities et vice versa.
http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=htmlentities
Ce lien ne fonctionne plus. La classe peut être trouvée ici http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html et le projet qui la contient est ici http: // commons.apache.org/proper/commons-lang/ – Jakub
@Jakub Merci. Mise à jour du message avec l'URL la plus récente – Amber